簡體   English   中英

從特定 str 列出列表

[英]Make list of list from specific str

我有一個很大的清單,看起來像:

a=["cos","3","4","5","cos1","4","5","cos2","1"]

我想創建一個類似的列表列表:

a=[["cos","3","4","5"],["cos1","4","5"],["cos2","1"]]

我試過了

sub=[]
for i,y in enumerate(a):
     if "cos" in y:
         sub.append([y])
         continue

它沒有用。 你可以幫幫我嗎?

你已經接近得到你想要的了。 就目前而言,如果"cos"是您當前正在查看的字符串的一部分,您只會創建一個新的子列表。 "cos"不在那個字符串中時怎么辦?

現在,您只需忽略此案。 但是,您希望將此元素添加到您之前附加到sub的子列表中。 您可以以sub[-1]的形式訪問子列表,因為它是sub的最后一個元素,然后是 append 。

sub=[]
for y in a:
     if "cos" in y:
         sub.append([y])
     else:
         sub[-1].append(y)

這使

sub =  [['cos', '3', '4', '5'], ['cos1', '4', '5'], ['cos2', '1']]

我刪除了不必要的enumerate()continue

這假定a的第一個元素包含"cos" ,因此sub[-1]在執行該行時將始終存在。 在不是這種情況下處理錯誤留給讀者作為練習。

注意'cos'的出現。 如果遇到數字,只需將它們添加到臨時列表中即可。 當您遇到名稱'cos'時,您應該將臨時列表(您的子列表)添加到結果列表中另外創建一個以項目開頭的新臨時列表 has 'cos'

但是在第一次迭代中有一個例外,你不想在結果中添加空列表(因為你遇到'cos'但臨時是空的)。 所以if temp:是為了那個。

a = ["cos", "3", "4", "5", "cos1", "4", "5", "cos2", "1"]

res = []
temp = []
for item in a:
    if not item.startswith('cos'):
        temp.append(item)
    else:
        if temp:
            res.append(temp)
        temp = [item]

if temp:
    res.append(temp)
print(res)

output:

[['cos', '3', '4', '5'], ['cos1', '4', '5'], ['cos2', '1']]

暫無
暫無

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

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