不确定如何在标题中明确地表达这一点。但是,让我说我有这个元组:
[['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]]
答案 0 :(得分:1)
假设'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:])
答案 1 :(得分:0)
你可以使用列表理解来做到这一点:
>>> 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
,我们会对子列表进行切片,只取整数部分。
答案 2 :(得分:0)
正如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
中的相应列表中。