簡體   English   中英

循環遍歷列表

[英]Looping a Split over 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

任何幫助將不勝感激。

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]

您可以為此嘗試嵌套列表理解:

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('|')在列表中每個項目將被調用兩次

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM