我递增一个计数器,导致列表的索引
码:
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)”传递。
问题是这些问题:
i = i - 1
i = i + 1
你基本上总是循环通过i = 1
,所以第一个条件i in range(1, 10)
将始终触发并给你5个零填充。
正如其他用户提到的那样,你应该在字符串中填充零而不是多个条件。
delist.append("ladybug_cube_{:06}_0.jpg".format(idx[i]))
更好的是,由于索引无关紧要(它相当于值),因此同时拥有i
和idx
是没有意义的。您可以只使用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',
...]
改变条件:
if/elif i in range(x,y):
至
if/elif int(idx[i]) in range(x,y):
因为它使用i计数器而不是真正的值idx [i]它需要正常工作。
你的脚本让我感到困惑,但是如果我没弄错的话,这会复制你的脚本:
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']