2014-09-21 58 views
-1

我在这里遇到了一些问题。例如,有2名列表:如何使用另一个列表中的所有项目划分一个列表中的所有项目,并执行所有可能的组合?

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

我想要做的就是它由一个新的列表:

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

此外,有没有什么办法可以做到这一点没有进口任何物件?

+0

要如何创建新的列表?你想混合他们吗? – Kasramvd 2014-09-21 11:38:11

+0

'0.5'从哪里来? – falsetru 2014-09-21 11:38:54

+0

我的意思更像: c = [12/6,12/12,12/1,...] – afterend31 2014-09-21 11:39:08

回答

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)]) 
+0

太棒了!这是我正在寻找的。在附注中,你如何制作“c”中的字符不重复?例如,我只希望2.0出现一次。 编辑:NVM!我知道了 – afterend31 2014-09-21 11:43:47

+0

使用set:set([float(x)/ y for a for for y in b]) – 2014-09-21 11:45:29

2

使用设置理解(以防止重复项目):

>>> 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] 
+0

+1不知道为什么我有时应该让事情变得复杂 – joaquin 2014-09-21 11:59:20

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

如果你wan牛逼浮动:

>>> [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))] 
相关问题