在python中操作列表

Posted

技术标签:

【中文标题】在python中操作列表【英文标题】:manipulate list in python 【发布时间】:2019-09-24 10:19:05 【问题描述】:

我正在做一个 python 挑战,我不能更进一步...... 我需要验证向量中的数字是否是素数。 喜欢:

矢量 = [2,5,12] 2 是素数(真) 5 是素数(真) 12 不是素数(FALSE)

这是我到目前为止的代码:

vetor = [ ]

def is_prime():
    x = vetor
    if x == 1:
        return False
    elif x == 2:
        return True


    for i in range(x):
        if (x % i) != 0:
            return True
        else:
            return False




def number():
    value = int(input('Write an integer number bigger than 1: '))
    if value >= 1:
        vetor.append(value)
        return number()
    elif value < 0:
        return number()
    elif value == 0:
        return is_prime()

print(number())

但是这样做,Python 会返回: TypeError: 'list' 对象不能被解释为整数

我可以做些什么来处理我列表中的数据?

【问题讨论】:

您已经定义了vetor = [ ],它是一个list 数据类型和x = vetor,当您将listinteger 数据类型在if x == 1: 和@987654328 中进行比较时,它们会发生冲突@。您需要遍历x 列表中的每个元素并进行比较测试,即for i in x: if i == 1: 等。 【参考方案1】:

试试这个:

vetor = [ ]

def is_prime(x):
    if x == 1:
        return False
    elif x == 2:
        return True


    for i in range(1, x):
        if (x % i) != 0:
            return True
        else:
            return False




def number():
    value = int(input('Write an integer number bigger than 1: '))
    if value >= 1:
        vetor.append(value)
        return number()
    elif value < 0:
        return number()
    elif value == 0:
        for x in vetor:
            if is_prime(x):
                print(x, 'is prime')
            else:
                print(x, 'is not prime')

print(number())

【讨论】:

【参考方案2】:

您尝试根据整数(数据类型)值(1 或 2)评估“整个”列表(数据类型)的值,然后您再次使用整个列表,因为它是单个整数值.您应该处理列表中的每个值并单独检查。

例如,您可以使用 for-each 循环来做到这一点:

for value in vetor:
    #do wahtever you want with 'value'

【讨论】:

【参考方案3】:

我建议让is_prime 接受一个整数作为参数。那么它只是一个接受整数并输出布尔值的纯函数。

我还注意到您的 is_prime 实现中存在问题。在您的if-else 语句中,无论在该语句中发生什么,该函数都会返回,因此 for 循环将始终在仅一次迭代后停止。如果您检查的除数​​中的 所有 个除数除以数字,则您应该只返回 False:

import math

def is_prime(n):
    if n <= 1:
        return False
    for d in range(2, int(math.sqrt(n))+1):
        if n % d == 0:
            return False
    return True

# >>> is_prime(7)
# True
# >>> is_prime(8)
# False

我还认为迭代编写程序会更清晰,而不是递归(您的 number 函数当前调用自身)。这可能看起来像

vector = []
while True:
    value = int(input('Write an integer bigger than 1: '))
    if value == 0:
        break
    elif value > 0:
        vector.append(value)
for n in vector:
    print(n, is_prime(n))

# prints something like:
#
# 1 False
# 2 True
# 11 True

【讨论】:

以上是关于在python中操作列表的主要内容,如果未能解决你的问题,请参考以下文章

python列表常规操作

python列表和元组的操作

python列表-简单操作

python列表的基本操作

Python列表与操作

python学习 - 列表操作