将元组划分为多个子元组 - Python

时间:2017-04-17 11:58:05

标签: python tuples

不确定如何在标题中明确地表达这一点。但是,让我说我有这个元组:

[['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]]

3 个答案:

答案 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]]

>>>

您需要遍历主列表中的元素(子列表)。对于每个子列表,我们检查第一个项目。如果第一项是ab,我们会对子列表进行切片,只取整数部分。

答案 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中的相应列表中。