首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按对或三元组在列表上迭代

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

Stack Overflow用户
提问于 2020-02-02 19:09:30
回答 3查看 483关注 0票数 0

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

代码语言:javascript
运行
复制
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)]

它返回此错误:

代码语言:javascript
运行
复制
IndexError: list index out of range

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

代码语言:javascript
运行
复制
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')]

此外,当我尝试在三胞胎上迭代时,也拒绝

代码语言:javascript
运行
复制
print([(list[x], list[x+1], list[x+2]) for x in range(0, len(list), 3)])

IndexError: list index out of range
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-02-02 19:20:57

当列表的长度不是2的倍数时,只需添加一个if条件,在列表中追加一个额外的空字符串以使其均衡化。三胞胎也一样。你必须添加一到两个字符串。

代码语言:javascript
运行
复制
   #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)]
票数 1
EN

Stack Overflow用户

发布于 2020-02-02 19:42:21

您正在将文件的名称拆分为“”(空格),如下所示:

代码语言:javascript
运行
复制
file_name_aslist = file_name.split()

您不能确定所有的文件在拆分后都有超过一个字。

你能做些什么:

代码语言:javascript
运行
复制
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)))

输出:

代码语言:javascript
运行
复制
[['ra']]
票数 1
EN

Stack Overflow用户

发布于 2020-02-02 19:31:08

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

您真的希望file_name_aslist是一个包含多个元素的列表吗?您是否试图按照其他条件进行拆分,如. (可能通过文件扩展名进行拆分,这也是一种糟糕的方法)?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60029593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档