列表理解有错误的长度

时间:2013-07-15 15:49:53

标签: python list-comprehension

我有列表种子和水蛭,使用len()
在请求长度上返回19 使用这两个列表是一个列表理解 -

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

每个元素应该是种子和水蛭之间的差异(这些是字符串,因此必须进行类型转换)
len(sldiff)返回361!
 我的问题是 - 为什么会发生这种情况,我该怎么做以获得所需的sldiff列表?

3 个答案:

答案 0 :(得分:3)

你正在进行双重列表理解 - 即你在'leechs'中为每个条目迭代整个'种子'(所以19 * 19,即361)。

看起来你真正想要做的就是遍历一个列表,每个列表都是来自种子的相关条目和来自水蛭的条目的组合。这就是zip的作用:

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

答案 1 :(得分: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)]

答案 2 :(得分:1)

由于两个for循环,你得到19 * 19 = 361的结果。

我不确定你想要什么,但可能是这样的:

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

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