我递增一个导致列表索引的计数器
代码:
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)”传递。
答案 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]))
更好的是,同时拥有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',
...]
答案 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']