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
的结果的并集,这与您期望的有什么不同?@alexlist(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]