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

时间:2018-03-06 17:56:38

标签: python loops concatenation

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

代码:

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个数字,但是它之前存储了一个额外的0 “STR(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)”传递。

3 个答案:

答案 0 :(得分: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',
 ...]

答案 1 :(得分:0)

更改条件:

default:
  if (square > 10)
     state = 'u';

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

因为它使用的是i计数器而非真正的值idx [i]才能正常工作。

答案 2 :(得分: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']