提问人:Brudalaxe 提问时间:6/28/2022 最后编辑:Brudalaxe 更新时间:6/28/2022 访问量:34
如何循环访问顺序字符串值并追加到嵌套列表
How to iterate through sequential string values and append to a nested list
问:
我有一个包含数据集文件名的列表,以数字的形式后跟一些描述性文本(每个文件都不同):
a = ['001_sometext', '002_sometext', ..., '162_sometext', '001_sometext', ..., '162_sometext]
列表从多次循环到多次,但列表也没有遵循完美的顺序,缺少一些数字。'001'
'162'
我的目的是读取包含的所有文件并将它们附加到另一个列表中,然后对 和 执行相同的操作,这样我最终会得到一个嵌套列表,其中包含序列中每个数字的单独列表。'001'
'002'
我目前的尝试:
phrases = []
xi = []
for digits in range(0, 162):
for x in a:
if str(digits) in x:
xi.append(x)
phrases.append(xi)
但是,这给了我一个一遍又一遍的整个列表的嵌套列表,而不是每个数字的列表。
编辑:
上面的循环是读取所有只包含 的文件,这会带回数百个文件并将它们添加到列表中。一个小的修复是我为每个数量级制作了一个循环:'0'
phrases = []
for digits in range(1, 10):
xi = []
for x in a:
if '00' + str(digits) in x:
xi.append(x)
else: None
phrases.append(xi)
和
phrases = []
for digits in range(10, 100):
xi = []
for x in a:
if '0' + str(digits) in x:
xi.append(x)
else: None
phrases.append(xi)
和
phrases = []
for digits in range(100, 162):
xi = []
for x in a:
if str(digits) in x:
xi.append(x)
else: None
phrases.append(xi)
答:
1赞
Nick
6/28/2022
#1
你的代码有一些问题,首先你需要清除每个循环;然后你需要在 1 到 163 的范围内迭代(即 1 到 162 包括 162),最后你不能使用 因为(例如)会匹配 、 等。xi
str(digits) in x
str(1)
001
015
102
像这样的东西应该可以工作:
for digits in range(1, 163):
xi = []
srch = f'{digits:03d}'
for x in a:
if x.startswith(srch):
xi.append(x)
phrases.append(xi)
或者,您可以使用嵌套列表推导式:
phrases = [ [f for f in a if f.startswith(f'{n:03d}')] for n in range(1, 163)]
如果
a = ['001_sometext', '002_sometext', '162_sometext', '001_someothertext', '162_someothertext']
这两者都给出了以下结果:
[['001_sometext', '001_someothertext'], ['002_sometext'], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], ['162_sometext', '162_someothertext']]
下一个:制作自定义函数句柄嵌套列表
评论
xi
x.startswith(str(digits).rjust(3, '0'))
f-string