Python 如何从列表中返回重复序列

Python 如何从列表中返回重复序列,python,list,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) list=范围(0,10) K=(1,4) def f(x): 对于k中的k: 收益率[i=4+k时x中i的i] 打印过滤器(f,列表) 我希望可以为

我试图从列表中返回一组重复出现的数字。我想我错过了什么

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)
list=范围(0,10)
K=(1,4)
def f(x):
对于k中的k:
收益率[i=4+k时x中i的i]
打印过滤器(f,列表)
我希望可以为定义设置一个循环。但是输出是
[0,1,2,5,6,7,8,9]
,显然不是预期的
[0,1,2,5,8,9]


那么,如何才能分离值呢?

首先,您的代码需要更正为以下内容:

def f(x):
    for k in K:
        yield [i for i in x if i <= 1 + k or i >= 4 + k]
现在,使用您在问题中编写的函数的更正版本和
intersect
函数,您可以得到预期的结果,如下所示:

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]


警告 潜在陷阱:

Python将允许您为变量指定标准函数的名称。但是,这样做会使您使用的函数的名称变得模糊,使函数隐藏起来,并可能导致意外行为。因此,建议您将
列表
变量的名称更改为其他名称。例如,您可以尝试使用
l1
list1

“但是输出是[0,1,2,5,6,7,8,9]”。它是?我不明白。我得到
缩进错误:应为缩进块
。你发错代码了吗?我肯定那只是粘贴错误。@Kevin缩进返回值line@TigerhawkT3你是对的,我错了。你要找的答案是
K=4
你得到的答案是
(K=4或K=1)
。它是来自
K=4
K=1
的结果的并集,这与您期望的有什么不同?@alex
list(f(范围(0,10))
生成“TypeError:'list'对象不可调用”
intersect()
做得很好。@普罗米修斯:那是因为你有一个名为
list
的变量。此变量现在覆盖内置函数,并提供您正在报告的错误。我已经在回答的警告部分解释了这一潜在影响。参考它并更正代码,然后一切都会正常工作。
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]