映射两个列表而不循环

San*_*kha 5 python

我有两个相等长度的列表.第一个列表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从第一个列表属于同一个分区,因为它们在第二个列表中具有相应的值.

分区数在开始时是已知的.

Kas*_*mvd 9

你可以使用字典:

>>> 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)


tim*_*geb 8

如果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使得它更容易阅读.