我试图从列表中返回一组重复的数字。我认为我错过了一些东西......
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]
。
那么如何分离值呢?
答案 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]
变量的名称更改为其他名称。例如,您可以尝试list
或l1
。