循环拆分列表
Looping a Split over Lists
我是 Python 的新手,我似乎无法通过谷歌搜索来修复我的错误。我想使用循环拆分列表,但语法不正确。
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
如有任何帮助,我们将不胜感激。
在您的 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']]
请注意,您的解决方案会就地执行操作(这可能不是您想要的)。
如果你想要 one-liner 这也将以有效的方式获得相同的输出:
result = [[val.split('-') if index == 0 else val for index, val in enumerate(substr.split('|'))] for substr in alist]
您可以为此尝试嵌套列表理解:
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']]
[已修复] 我喜欢列表理解,我认为这会起作用:
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']]
[ [x.split('|')[0].split('-')]+ x.split('|')[1:] for x in alist]
上面的工作,但是 split('|') 将被调用两次列表中的每个项目
我是 Python 的新手,我似乎无法通过谷歌搜索来修复我的错误。我想使用循环拆分列表,但语法不正确。
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
如有任何帮助,我们将不胜感激。
在您的 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']]
请注意,您的解决方案会就地执行操作(这可能不是您想要的)。
如果你想要 one-liner 这也将以有效的方式获得相同的输出:
result = [[val.split('-') if index == 0 else val for index, val in enumerate(substr.split('|'))] for substr in alist]
您可以为此尝试嵌套列表理解:
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']]
[已修复] 我喜欢列表理解,我认为这会起作用:
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']]
[ [x.split('|')[0].split('-')]+ x.split('|')[1:] for x in alist]
上面的工作,但是 split('|') 将被调用两次列表中的每个项目