不確定如何在標題中以特殊方式表示。但是,讓我們說,我有這樣的元組:將元組劃分爲多個子元組 - Python
[['a',2,3],['a',4,5],['b',10,20],['b',30,40],['a',5,6]]
如何劃分這個解析成兩個元:
a = [[2,3],[4,5],[5,6]]
b = [[10,20],[30,40]]
不確定如何在標題中以特殊方式表示。但是,讓我們說,我有這樣的元組:將元組劃分爲多個子元組 - Python
[['a',2,3],['a',4,5],['b',10,20],['b',30,40],['a',5,6]]
如何劃分這個解析成兩個元:
a = [[2,3],[4,5],[5,6]]
b = [[10,20],[30,40]]
假設'a'
和'b'
是值得被硬編碼有意義的常數,一個簡單的解決方案:
arr = [['a',2,3],['a',4,5],['b',10,20],['b',30,40],['a',5,6]]
a = [l[1:] for l in arr if l[0] == 'a']
b = [l[1:] for l in arr if l[0] == 'b']
如果需要一個比較通用代碼:
from collections import defaultdict
arr = [['a',2,3],['a',4,5],['b',10,20],['b',30,40],['a',5,6]]
d = defaultdict(list)
for l in arr:
d[l[0]].append(l[1:])
你可以做,使用列表理解:
>>> l = [['a',2,3],['a',4,5],['b',10,20],['b',30,40],['a',5,6]]
>>> a = [x[1:] for x in l if x[0] == "a"]
>>> a
[[2, 3], [4, 5], [5, 6]]
>>> b = [x[1:] for x in l if x[0] == "b"]
>>> b
[[10, 20], [30, 40]]
>>>
您需要遍歷在主列表中的元素(子表)。對於每個子列表,我們檢查第一個項目。如果第一項是a
或b
,那麼我們對子列表進行切片並僅取整數部分。
正如jonrsharpe所說,將這些列表存儲在字典中可能更有用。使用字典將子列表以您想要的方式進行劃分很容易,可以將列表作爲以字符串爲鍵的值累積到列表中。當然,如果你真的想要的話,你可以將結果列表綁定到不同的名字上。
seq = [['a', 2, 3], ['a', 4, 5], ['b', 10, 20], ['b', 30, 40], ['a', 5, 6]]
d = {}
for k, *u in seq:
d.setdefault(k, []).append(u)
print(d)
a = d['a']
b = d['b']
print(a)
print(b)
輸出
{'a': [[2, 3], [4, 5], [5, 6]], 'b': [[10, 20], [30, 40]]}
[[2, 3], [4, 5], [5, 6]]
[[10, 20], [30, 40]]
for k, *u in seq:
在每個子列表中的串結合k
,存儲該子列表作爲u
的剩餘部分。然後,我們將u
子列表附加到字典d
的相應列表中。
謝謝!將列表存儲到字典中可能是我正在工作的最優雅的解決方案。 – user3150126
這些被稱爲列表btw –
你有什麼試過,究竟是什麼問題呢?用字母「a」和「b」可能會更好。 – jonrsharpe