如何从列表

时间:2015-07-31 17:31:31

标签: python list

我试图从列表中返回一组重复的数字。我认为我错过了一些东西......

list = range(0,10)
K = (1,4)

def f(x):
    for k in K:
        yield [i for i in x if i <= 1+k or i >= 4+k]       

print filter(f, list)

我希望可以为定义设置循环。但输出为[0, 1, 2, 5, 6, 7, 8, 9],显然不是预期的[0,1,2,5,8,9]

那么如何分离值呢?

1 个答案:

答案 0 :(得分:0)

首先,您的代码需要更正为:

<?php
header("Content-Type: image/png");
$im = @imagecreate(110, 20)
    or die("Cannot Initialize new GD image stream");
$background_color = imagecolorallocate($im, 0, 0, 0);
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 1, 5, 5,  "A Simple Text String", $text_color);
imagepng($im);
imagedestroy($im);
?>

通过此更正,def f(x): for k in K: yield [i for i in x if i <= 1 + k or i >= 4 + k] 生成list(f(range(0, 10)))

下一步是过滤两个集合的交叉元素。这可以通过多种方式完成,如问题Find intersection of two lists?中所示。

根据this answer

,这是我首选的方法
[[0, 1, 2, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 8, 9]]

现在,使用您在问题中使用def intersect(lists): count = len(lists) if count == 0: return [] elif count == 1: return lists elif count == 2: es1 = set(lists[1]) return [x for x in lists[0] if x in es1] else: return intersect((lists[0], intersect(lists[1:]))) 函数编写的函数的更正版本,您将获得预期结果,如下所示:

intersect


警告!!

潜在陷阱:
Python将允许您为变量指定标准函数的名称。但是,执行此操作会影响您已使用其名称的函数,从而使该函数隐藏并可能导致意外行为。因此,建议您将result = list(f(range(0, 10))) result # [[0, 1, 2, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 8, 9]] intersect(result) # [0, 1, 2, 5, 8, 9] 变量的名称更改为其他名称。例如,您可以尝试listl1