1

我有列表种子和水蛭,使用 len() 在询问长度时返回 19
并且使用这两个列表是列表理解 -

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

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

4

3 回答 3

3

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

似乎您真正想要做的是遍历一个列表,其中的每个条目都是来自种子的相关条目和来自水蛭的条目的组合。这就是zip

[(int(seed) - int(leech)) for seed, leech in zip(seeds, leechs)]
于 2013-07-15T15:51:57.113 回答
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)]
于 2013-07-15T15:52:46.290 回答
1

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

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

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

假设 len(seeds) == len(leechs)

于 2013-07-15T15:53:39.867 回答