2013-07-15 52 views
1

我有列表种子和leechs这对要求使用LEN()
长度 而使用这两个名单回19是一个列表理解 -列表理解错误的长度

sldiff = [(int(seed)-int(leech)) for seed in seeds for leech in leechs] 

每个元素应该是种子和水蛭之间的区别(它们是字符串,因此必须被模拟)
但是len(sldiff)返回361!
我的问题是 - 为什么会发生,我该怎么做才能获得所需的sldiff列表?

+3

19 * 19 = 361是一个很好的起点 – keyser

回答

3

你正在做一个双重列表理解 - 即你正在迭代'水蛭'中的每个条目的全部'种子'(所以19 * 19,即361)。

好像你真正想要做的是遍历一个列表,每个列表是来自种子的相关入口和来自水蛭的入口的组合。这就是zip做:

[(int(seed) - int(leech)) for seed, leech in zip(seeds, leechs)] 
+0

OP在做什么被称为笛卡尔产品。 –

+0

谢谢。我会在大约11分钟内将您的答案标记为正确。 – svineet

2
[(int(seed)-int(leech)) for seed in seeds for leech in leechs] 

类同为:

temp = [] 
    for seed in seeds: 
     for leech in leechs: 
      temp.append(int(seed)-int(leech)) 

显然,这是19 * 19

我想你想

[int(x)-int(y) for x, y in zip(seeds, leechs)] 
1

你得到19 * 19 =的结果361因为两个for循环。

我不清楚自己想要什么,但很可能是这样的:

sldiff = [int(seed[x]) - int(leech[x]) for x in xrange(len(seeds))] 

假设LEN(种子)== LEN(leechs)