我有两个相等长度的列表.第一个列表l1包含数据.
l1 = [2, 3, 5, 7, 8, 10, ... , 23]
Run Code Online (Sandbox Code Playgroud)
第二个列表l2包含数据l1所属的类别:
l2 = [1, 1, 2, 1, 3, 4, ... , 3]
Run Code Online (Sandbox Code Playgroud)
如何1, 2, 3, 4使用列表推导或lambda函数基于数字定义的位置(例如在第二个列表中)对第一个列表进行分区.例如,2, 3, 7从第一个列表属于同一个分区,因为它们在第二个列表中具有相应的值.
分区数在开始时是已知的.
你可以使用字典:
>>> l1 = [2, 3, 5, 7, 8, 10, 23]
>>> l2 = [1, 1, 2, 1, 3, 4, 3]
>>> d = {}
>>> for i, j in zip(l1, l2):
... d.setdefault(j, []).append(i)
...
>>>
>>> d
{1: [2, 3, 7], 2: [5], 3: [8, 23], 4: [10]}
Run Code Online (Sandbox Code Playgroud)
如果a dict很好,我建议使用defaultdict:
>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> for number, category in zip(l1, l2):
... d[category].append(number)
...
>>> d
defaultdict(<type 'list'>, {1: [2, 3, 7], 2: [5], 3: [8, 23], 4: [10]})
Run Code Online (Sandbox Code Playgroud)
itertools.izip如果您使用的是Python 2,请考虑使用内存效率.
这与Kasramvd的解决方案基本相同,但我认为这defaultdict使得它更容易阅读.