按对或三元组在列表上迭代

2024-09-28 21:46:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在特定文件夹中的文件列表上迭代,并按成对单词或三元组单词存储文件名。 我创建了以下代码:

for file_name in os.listdir(path):
    file_name_aslist = file_name.split()
    o = [(file_name_aslist[x], file_name_aslist [x+1]) for x in range(0, len(file_name_aslist ), 2)]

它返回以下错误:

IndexError: list index out of range

表达式在单个列表中工作,但不希望在循环中工作: 例如:

list = ['ra', 'ti', 'kaa', 'esss', 'fm', 'am']
print([(list[x], list[x+1]) for x in range(0, len(list), 2)])

[('ra', 'ti'), ('kaa', 'esss'), ('fm', 'am')]

另外,当我尝试迭代三元组时,也要拒绝

print([(list[x], list[x+1], list[x+2]) for x in range(0, len(list), 3)])

IndexError: list index out of range

Tags: ofnamein列表forindexlenrange
3条回答

您正在将文件的名称按“”分隔(空格):

file_name_aslist = file_name.split()

拆分后,您无法确保所有文件的字数都超过1个

你能做什么:

def chunks_n(my_list, n):
    for e in range(0, len(my_list), n):
        yield my_list[e: e + n]

my_list = ['ra']
print(list(chunks_n(my_list, 2)))

输出:

[['ra']]

当列表的长度不是2的倍数时,只需添加一个if条件,在列表中附加一个额外的空字符串以使其相等。 三胞胎也一样。您必须添加一个或两个字符串

   #donot use split function.

file_name_aslist = os.listdir(path)
if len(file_name_aslist) // 2 == 0 :
   o = [(file_name_aslist[x], file_name_aslist [x+1]) for x in range(0, 
   len(file_name_aslist ), 2)]
else:
   file_name_aslist.append("")

   o = [(file_name_aslist[x], file_name_aslist [x+1]) for x in range(0, len(file_name_aslist ), 2)]

第一件事:在使用“单一列表”的示例中,list不一定代表原始的file_name_aslist。如果文件名不包含空格,file_name_aslist将是一个包含单个元素的列表,即文件名本身。对于这些情况,很容易验证file_name_aslist [x+1]为什么会抛出IndexError

你真的期望file_name_aslist是一个包含多个元素的列表吗?您是否正在尝试按其他条件进行拆分,例如.(可能按文件扩展名进行拆分,这也是一种不好的方法)

相关问题 更多 >