如何使用另一个列表中的所有项目划分一个列表中的所有项目,并进行所有可能的组合?

时间:2014-09-21 11:36:28

标签: python list

我在这里遇到了一些问题。例如,有2个列表:

a=[12,3,4,6,2]
b=[6,2,1,3,12]

我想要做的是制作一个包含以下内容的新列表:

c=[2,6,12,4,1,0.5, ...]

另外,有没有办法在不导入任何东西的情况下这样做?

3 个答案:

答案 0 :(得分:2)

使用set comprehension(以防止重复的项目):

>>> a = [12,3,4,6,2]
>>> b = [6,2,1,3,12]
>>> c = {x/y for x in a for y in b}  # float(x)/y  in Python 2.x
>>> c
{0.5, 1.0, 2.0, 1.5, 4.0, 3.0, 6.0, 0.25, 0.6666666666666666, 1.3333333333333333, 
 0.16666666666666666, 12.0, 0.3333333333333333}

使用list获取列表对象而不是set

>>> list(c)
[0.5, 1.0, 2.0, 1.5, 4.0, 3.0, 6.0, 0.25, 0.6666666666666666, 1.3333333333333333,
 0.16666666666666666, 12.0, 0.3333333333333333]

答案 1 :(得分:1)

您可以使用列表推导:

[float(x)/y for x in a for y in b]
[2.0, 6.0, 12.0, 4.0, 1.0, 0.5, 1.5, 3.0, 1.0, 0.25, 0.6666666666666666, 2.0, 4.0, 1.3333333333333333, 0.3333333333333333, 1.0, 3.0, 6.0, 2.0, 0.5, 0.3333333333333333, 1.0, 2.0, 0.6666666666666666, 0.16666666666666666]

如果您希望结果为分数,则应导入分数模块:

import fractions
set([fractions.Fraction(x)/y for x in a for y in b])
set([Fraction(1, 2), Fraction(1, 1), Fraction(2, 1), Fraction(3, 1), Fraction(4, 1), Fraction(6, 1), Fraction(12, 1), Fraction(1, 3), Fraction(2, 3), Fraction(4, 3), Fraction(1, 6), Fraction(1, 4), Fraction(3, 2)])

答案 2 :(得分:0)

您可以使用itertools.product让所有对减去:

>>> import itertools
>>> pairs = list(itertools.product(*(a,b)))
>>> pairs
[(12, 6), (12, 2), (12, 1), (12, 3), (12, 12), (3, 6), (3, 2), (3, 1), (3, 3), (3, 12), (4, 6), (4, 2), (4, 1), (4, 3), (4, 12), (6, 6), (6, 2), (6, 1), (6, 3), (6, 12), (2, 6), (2, 2), (2, 1), (2, 3), (2, 12)]

然后划分:

>>> [a/b for a,b in pairs]
[2, 6, 12, 4, 1, 0, 1, 3, 1, 0, 0, 2, 4, 1, 0, 1, 3, 6, 2, 0, 0, 1, 2, 0, 0]
>>> 

如果你想要花车:

>>> [float(a)/b for a,b in pairs]
[2.0, 6.0, 12.0, 4.0, 1.0, 0.5, 1.5, 3.0, 1.0, 0.25, 0.6666666666666666, 2.0, 4.0, 1.3333333333333333, 0.3333333333333333, 1.0, 3.0, 6.0, 2.0, 0.5, 0.3333333333333333, 1.0, 2.0, 0.6666666666666666, 0.16666666666666666]

将所有内容整合在一起:

>>> [float(a)/b for a,b in it.product(*(a,b))]