【发布时间】:2011-09-13 06:50:25
【问题描述】:
我正在寻找一种方法,将包含列表(以下a)的列表制作成具有两个条件的单个列表(以下b):
- 新列表 (
b) 的顺序基于该值在a中的某些列表中出现的次数。 - 一个值只能出现一次
基本上把a变成b:
a = [[1,2,3,4], [2,3,4], [4,5,6]]
# value 4 occurs 3 times in list a and gets first position
# value 2 occurs 2 times in list a and get second position and so on...
b = [4,2,3,1,5,6]
我认为可以使用set 和一些列表魔术来做到这一点。但是当a 可以包含任意数量的列表时,我无法理解它。 a 列表是根据用户输入创建的(我猜它可以包含 1 - 20 个列表,每个列表中最多包含 200-300 个项目)。
我尝试与[set(l) for l in a] 类似,但不知道如何执行set(l) & set(l).... 以获取所有匹配的项目。
如果没有for 循环迭代子列表计数 * 子列表时间中的项目,是否可能?
【问题讨论】:
-
你能更详细地描述一下你是如何从
a得到b的吗?我无法解析您的第一句话。 -
更新了问题以澄清它。希望我让自己更清楚一点。
-
我认为这是有道理的。所以
[['a','b','c'], ['b'], ['c']]会映射到['b','c','a']。在这种情况下,'b'和'c'的顺序是否重要? -
@Wilduck:准确地说。而
'b'和'c'的顺序无关紧要