如果我有一個元素串列:
foo = ["Bob", 14, 20, "Sam", "Bob", 15, 23, "Bob", "Jim", 14]
我想拆分此串列,以便它們由元素“Bob”拆分。
我如何拆分它,使輸出為:
[["Bob", 14, 20, "Sam"], ["Bob", 15, 23], ["Bob", "Jim", 14]]
假設串列可以比這大得多,但總會有一些元素稱為"Bob"。
uj5u.com熱心網友回復:
這是一種方法:
>>> foo = ["Bob", 14, 20, "Sam", "Bob", 15, 23, "Bob", "Jim", 14]
>>>
>>> x = [i for i, s in enumerate(foo) if s == "Bob"]
>>> y = x[1:] [len(foo)]
>>> z = [foo[i:j] for i, j in zip(x, y)]
>>>
>>> z
[['Bob', 14, 20, 'Sam'], ['Bob', 15, 23], ['Bob', 'Jim', 14]]
>>>
如果串列不是以 開頭'Bob',它將跳過第一個之前的元素'Bob',所以如果你想要那些元素,那么你需要為此添加一個檢查。
uj5u.com熱心網友回復:
這是一種簡單的方法。
我們測驗每個專案foo以查看它是否匹配"Bob",如果匹配,我們創建一個small_list來保存"Bob"并成為一個存盤庫,然后保存將要跟隨的其他元素。
如果元素不是 ( !=) ,"Bob"那么我們只需將它添加到現有的small_list并將 添加small_list到更大的串列中并繼續這樣做,直到我們到達另一個"Bob"并從一個新的開始small_list。
foo = ["Bob", 14, 20, "Sam", "Bob", 15, 23, "Bob", "Jim", 14]
big_list = []
small_list = []
for item in foo:
if item != "Bob":
small_list.append(item)
elif item == "Bob":
small_list = [item]
big_list.append(small_list)
uj5u.com熱心網友回復:
在輸出串列上使用帶有迭代器的擴展可以執行分組:
foo = ["Bob", 14, 20, "Sam", "Bob", 15, 23, "Bob", "Jim", 14]
bar = []
bar.extend([x] for x in foo if x=='Bob' or bar[-1].append(x))
print(bar)
[['Bob', 14, 20, 'Sam'], ['Bob', 15, 23], ['Bob', 'Jim', 14]]
請注意, foo 的第一項必須是“Bob”才能使其作業。否則你需要用 [[]] 而不是 [] 來初始化 bar
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/347415.html
上一篇:為什么在使用ListIterator的next方法時會出現型別不兼容的錯誤,而在使用List的get方法時卻不會?
下一篇:如何將時間字串串列增加一天?
