连接字符串会产生额外的0

问题描述 投票:0回答:3

我递增一个计数器,导致列表的索引

码:

delist = []
i = 1
idx = [0, ..., 10, ..., 100, ..., 1000, ...]

while( i < len(idx)):

    if i in range(1, 10):
        delist.append("ladybug_cube_00000" + str(idx[i]) + "_0.jpg")

    elif i in range(10, 100):
        delist.append("ladybug_cube_0000" + str(idx[i]) + "_0.jpg")

    elif i in range(100, 1000):
        delist.append("ladybug_cube_000" + str(idx[i]) + "_0.jpg")

    elif i in range(1000, 10000):
        delist.append("ladybug_cube_00" + str(idx[i]) + "_0.jpg")

    elif i in range(10000, 100000):
        delist.append("ladybug_cube_0" + str(idx[i]) + "_0.jpg")

    elif i in range(100000, 1000000):
        delist.append("ladybug_cube_" + str(idx[i]) + "_0.jpg")

    #this deletes that index from the list
    del idx[i]

    #this goes an step back so it repeats the loop with the new index's variable.
    i = i-1
i= i+1

问题是它应该将每个字符串存储到列表“delist”中的新索引中,并且每个元素应该在“cube_”之后和“_0.jpg”之前有6个数字,但是它在“str”之前存储了一个额外的0。 IDX [I])”。

示例输出:

delist=["ladybug_cube_000001_0.jpg", "ladybug_cube_000010_0.jpg", "ladybug_cube_000100_0.jpg", "ladybug_cube_001000_0.jpg", "ladybug_cube_010000_0.jpg", "ladybug_cube_100000_0.jpg"]

我得到了什么:

delist=["ladybug_cube_000001_0.jpg", "ladybug_cube_0000010_0.jpg", "ladybug_cube_00000100_0.jpg", "ladybug_cube_000001000_0.jpg", "ladybug_cube_0000010000_0.jpg", "ladybug_cube_00000100000_0.jpg"] 

喜欢它不会从“范围(1,10)”传递。

python loops concatenation
3个回答
1
投票

问题是这些问题:

i = i - 1
i = i + 1

你基本上总是循环通过i = 1,所以第一个条件i in range(1, 10)将始终触发并给你5个零填充。

正如其他用户提到的那样,你应该在字符串中填充零而不是多个条件。

delist.append("ladybug_cube_{:06}_0.jpg".format(idx[i]))

更好的是,由于索引无关紧要(它相当于值),因此同时拥有iidx是没有意义的。您可以只使用idx = list(range(100000))并循环通过idx而不是执行所有这些索引管理,如下所示:

idx = list(range(100000))
for i in idx:
    delist.append("ladybug_cube_{:06}_0.jpg".format(i))

您甚至可以进一步简化代码到此列表理解:

delist = ["ladybug_cube_{:06}_0.jpg".format(i) for i in range(100000)]

输出:

['ladybug_cube_000000_0.jpg',
 'ladybug_cube_000001_0.jpg',
 ...
 'ladybug_cube_000010_0.jpg',
 'ladybug_cube_000011_0.jpg',
 'ladybug_cube_000012_0.jpg',
 ...
 'ladybug_cube_000100_0.jpg',
 'ladybug_cube_000101_0.jpg',
 'ladybug_cube_000102_0.jpg',
 ...]

0
投票

改变条件:

if/elif i in range(x,y):

if/elif int(idx[i]) in range(x,y):

因为它使用i计数器而不是真正的值idx [i]它需要正常工作。


0
投票

你的脚本让我感到困惑,但是如果我没弄错的话,这会复制你的脚本:

idx = [0, 1, 2, 14, 121, 123100]
delist = ["ladybug_cube_" + str(i).zfill(6) + "_0.jpg" for i in idx]

#output
['ladybug_cube_000000_0.jpg', 'ladybug_cube_000001_0.jpg', 'ladybug_cube_000002_0.jpg', 'ladybug_cube_000014_0.jpg', 'ladybug_cube_000121_0.jpg', 'ladybug_cube_123100_0.jpg']
© www.soinside.com 2019 - 2024. All rights reserved.