用Python填充列表

wha*_*hat 0 python for-loop list python-3.x

我是Python的新手.我正在尝试用文件夹中的一堆图像的文件名填充列表.它们都以"frameinstance"开头,然后是0-40之间的数字,即"frameinstance0.png".我尝试了下面的代码,但是我收到了一个MemoryError错误.

filenamelist = []
i = 0
for i in range(0,40):
  filenamelist = [str(filenamelist) + "frameinstance" + str(i)]
Run Code Online (Sandbox Code Playgroud)

我也尝试过这个.我的输出很接近,但它不是一个列表.

filenamelist = []
i = 0

for i in range(0,40):
  filenamelist = str(filenamelist) + "frameinstance" + str(i)

print(filenamelist)
Run Code Online (Sandbox Code Playgroud)

输出是: []frameinstance0frameinstance1frameinstance2frameinstance3frameinstance4frameinstance5frameinstance6frameinstance7frameinstance8frameinstance9frameinstance10frameinstance11frameinstance12frameinstance13frameinstance14frameinstance15frameinstance16frameinstance17frameinstance18frameinstance19frameinstance20frameinstance21frameinstance22frameinstance23frameinstance24frameinstance25frameinstance26frameinstance27frameinstance28frameinstance29frameinstance30frameinstance31frameinstance32frameinstance33frameinstance34frameinstance35frameinstance36frameinstance37frameinstance38frameinstance39

Rig*_*leg 5

基本列表理解:

filenamelist = ["frameinstance{}".format(i) for i in range(41)]
Run Code Online (Sandbox Code Playgroud)

在第一个代码中,您总是filenamelist通过将其转换为更长和更长的字符串来更改值,该字符串最终在a上MemoryError.检查Ryan的答案以获取更多相关信息,特别是为什么它不会出现在第二个代码中.

在第二个代码,你把[]filenamelist,然后用它串联"frameinstance" + str(i),所以在每次迭代,您连接"frameinstancei"在这个字符串的结尾.你最终会得到一个"[]""frameinstancei"40 开头的字符串.


但事情很少:

  • 构建列表时,要么使用上面的列表推导来获取短列表,要么使用该append方法.通常,写filenamelist.append("frameinstance{}".format(i))而不是filenamelist = ...
  • 通过编写打印字符串被认为已弃用"blah" + str(x) + "blah".相反,使用format方法:"blah{}blah".format(x).
  • 不要忘了,range(n)让你从整数0n-1.因此,您的通话应该是range(0,41)代替range(0,40),而可能仅仅是range(41).