Python 为什么我不能像从列表中一样从元组中删除项?
我通过创建排列生成了一个数字列表。我现在正试图从这个列表中删除非素数Python 为什么我不能像从列表中一样从元组中删除项?,python,itertools,Python,Itertools,我通过创建排列生成了一个数字列表。我现在正试图从这个列表中删除非素数 import itertools from sympy import isprime values = list(itertools.permutations([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 4)) def removeNonPrimes(items): return [p for p in items if isprime(p)] primes = removeNonPrimes
import itertools
from sympy import isprime
values = list(itertools.permutations([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 4))
def removeNonPrimes(items):
return [p for p in items if isprime(p)]
primes = removeNonPrimes(values)
print primes
但是,当我试图创建一个只包含素数的新列表时,我得到以下错误:
TypeError: int() argument must be a string or a number, not 'tuple'
为什么这是一个元组而不是一个列表?不过,为什么我不能像删除列表一样从元组中删除项呢?根据定义,元组是不可变的。您可以转换为列表,删除内容,然后根据需要转换回元组。此外,“值”是一个列表,但它是一个元组列表。转换为列表列表的简单方法:
values=[list(x) for x in values]
值
是一个包含元组
对象的列表,看起来像(0,1,2,3)
。这就是传递给isprime(p)
的p
,这就是引发错误的原因。我不使用sympy
,所以我只能推测,isprime
可能需要一个整数而不是元组,因为传递给isprime
的任何东西都在p
上调用int(…)
,而不是生成一个数字列表。您正在生成一个数字元组列表(5,4,7,1)
不是5471
。您应该打印(值)以查看错误的位置。这表示为。你的最终目标是什么?所有从0到1000的素数都有不重复的数字(包括前导零)?在这种情况下,我的最终目标是得到我所问问题的答案。我不想让任何人帮我解决这个问题。这解决了主题行中的问题,而不是OP的问题……这几乎肯定不会解决根本问题。相反,错误现在将是TypeError:int()参数必须是字符串或数字,而不是“list”
嗯,这就是他问的问题。如果他编辑了这个问题,我很乐意更新。这可能值得一提:他的实际问题与从列表或元组中删除项目无关。你的答案与当前的问题无关。我现在理解了这个问题,我将使用“值”将其转化为这个特定问题的整数列表。我也知道元组现在是不可变的。我不喜欢在我的问题上得到否定的分数——我仍然相信这是一个我想要回答的有效问题,这将影响我是否选择在代码中继续使用元组。