社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python动态循环范围大小

Evaldas Lopato • 5 年前 • 1393 次点击  

我想补充一下 Link 使用python将参数设置为ini文件。ini文件示例:

[sometag]
sometext
sometext
sometext

[sometag2]
sometext2
sometext2
sometext2

[sometag3]
sometext3
sometext3
sometext3

我需要这样做:

[sometag]
sometext
sometext
sometext

Link = [sometag]

[sometag2]
sometext2
sometext2
sometext2

Link = [sometag2]
...

我的for循环:

for i in range(len(m)):
    if m[i] in t:
        for j in xrange(i, len(m)):
            if len(m[j].strip()) == 0 and m[j+1].startswith('['):
                m.insert(j, Link.....
                break


# m = ini_file.readlines()
# t = ['[sometag]', '[sometag2]']

我的代码可以工作,但它不为最后的标记添加链接。我找到原因了。如果我加上 in range(len(m)+100):

看起来像 len(m) 旧值(静态?),因为我在循环期间使用insert增加len。有什么想法吗?

我试过像 insertings = 0 ,然后 range(len(m)+insertings) 在插入之后 insertings = insertings+1 但没有运气:(

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/56028
 
1393 次点击  
文章 [ 2 ]  |  最新文章 5 年前
ShadowRanger
Reply   •   1 楼
ShadowRanger    5 年前

使用 range 将您锁定到特定的迭代次数; range(len(m)) 构造 使用的值 len(m) 范围 s是不变的)。你 这种行为,与您希望的方式相同:

s = '123'
i = int(s)
s = 'abc'

离开 i 123 ,而不是在 int 'abc' (允许 范围(len(m)) m 改变在道德上是对等的,同样是疯狂的)。

修改 list 当你重复它的时候,它是不受欢迎的,特别是当你 insert 列表 ,或删除元素。这太容易出错了;在这种情况下,当 j ,和 插入 i + 1 下一步),同时将其插入 j > i 将由外部循环而不是内部循环看到(在这两种情况下,值 m[j]

一般来说,更安全的解决方案是 从头开始,从现有的 列表 根据需要,以及新的元素到最后。速度也快得多 插入 列表 O(n) 对于 每个 插入 O(m * n) 哪里 是所需的插入次数, n 是输入大小),而 append O(1) (总成本 O(m + n) ).

ShadowRanger
Reply   •   2 楼
ShadowRanger    5 年前

创建 新的 列表:

new = []
tag = None
for line in m:
    if line.startswith('['):
        if tag:
            new.append('Link = ' + tag)
        tag = line
    new.append(line)