不确定如何在标题中以特殊方式表示。但是,让我们说,我有这样的元组:将元组划分为多个子元组 - 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