循环遍历列表

时间:2019-06-17 17:55:30

标签: python nested-lists

我是Python的新手,我似乎无法通过任何数量的Google搜索来修复错误。我想使用循环分割列表,但是语法不正确。

alist = ["aa-aa-aa-aa|bb|cc","bb-bb-bb|abc|ab","cc-cccc-cc|abc|a"]
alist[0] = alist[0].split("|")
alist[0][0] = alist[0][0].split("-")
print(alist)

上面的方法适用于拆分第一个条目的第一个条目的情况,但是我想拆分列表中每个项目的第一个条目。

给出输出:

[[['aa', 'aa', 'aa', 'aa'], 'bb', 'cc'], 'bb-bb-bb|abc|ab', 'cc-cccc-cc|abc|a']

所需的输出:

[[['aa', 'aa', 'aa', 'aa'], 'bb', 'cc'], [['bb','bb','bb'],'abc','ab'], [['cc','cccc','cc'],'abc','a']

但是,当我尝试像对文件一样进行循环操作时,会出现错误。

alist = ["aa-aa-aa-aa|bb|cc","bb-bb-bb|abc|ab","cc-cccc-cc|abc|a"]
n = 0
for n in alist:
    alist[n] = alist[n].split("|")
    alist[n][0] = alist[n][0].split("-")
print(alist)

错误消息:

Traceback (most recent call last):
  File "C:\Users\EALDEN3\Documents\Python Code\Scratch.py", line 5, in <module>
    alist[n] = alist[n].split("|")
TypeError: list indices must be integers or slices, not str

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:2)

for循环中n是元素而不是索引,如果要使用索引,则需要以不同的方式进行循环:

alist = ["aa-aa-aa-aa|bb|cc","bb-bb-bb|abc|ab","cc-cccc-cc|abc|a"]
for index in range(len(alist)):
    alist[index] = alist[index].split("|")
    alist[index][0] = alist[index][0].split("-")
print(alist)

输出:

[[['aa', 'aa', 'aa', 'aa'], 'bb', 'cc'], [['bb', 'bb', 'bb'], 'abc', 'ab'], [['cc', 'cccc','cc'], 'abc', 'a']]

请注意,您的解决方案可以就地执行操作(可能不是您想要的操作)。

如果您希望使用单线,这也将以有效的方式获得相同的输出:

result = [[val.split('-') if index == 0 else val for index, val in enumerate(substr.split('|'))] for substr in alist]

答案 1 :(得分:1)

您可以为此尝试嵌套列表理解:

alist = ["aa-aa-aa-aa|bb|cc","bb-bb-bb|abc|ab","cc-cccc-cc|abc|a"]
alist = [[j.split('-')  if j.count('-')>0 else j for j in i.split('|')] for i in alist]

输出

[[['aa', 'aa', 'aa', 'aa'], 'bb', 'cc'], [['bb', 'bb', 'bb'], 'abc', 'ab'], [['cc', 'cccc', 'cc'], 'abc', 'a']]

答案 2 :(得分:1)

[固定]我喜欢列表理解,并且我认为这会起作用:

alist = ["aa-aa-aa-aa|bb|cc","bb-bb-bb|abc|ab","cc-cccc-cc|abc|a"]

output = [[y.split('-') if '-' in y else y for y in x.split('|')] for x in alist]
print(output)

这只是循环遍历原始列表中的每个元素,然后在“ |”上分割然后如果子串中包含“-”,则在“-”上分割。

输出为:

[[['aa', 'aa', 'aa', 'aa'], 'bb', 'cc'], [['bb', 'bb', 'bb'], 'abc', 'ab'], [['cc', 'cccc', 'cc'], 'abc', 'a']]

答案 3 :(得分:0)

[ [x.split('|')[0].split('-')]+ x.split('|')[1:] for x in alist]

以上方法有效,但是split('|')在列表中的每个项目都会被调用两次