从python for循环函数返回值

2024-03-28 10:54:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经编辑了我的问题。该代码包含一个is\u prime公式,该公式指示一个数字是否为prime>;我正在尝试提取3到65范围内的所有prime值

a = []
b = []                                             
c = []                                             
d = []
def ll_prime(n_start, n_end):  
    for number in range(n_start, n_end):
        if is_prime(number) ==True:
            a.append(number)
            b.append(1)
        else:
            c.append(number)
            d.append(0)
    return (list(zip(a,b)))

上面的代码运行良好,但当我调用函数ll_prime(3,65)时,它会给出以下错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-498-1a1a58988fa7> in <module>()
----> 1 ll_prime(3,65)
      2 #type(tyl)
      3 #list_values = [ v for v in tyl.values()]

<ipython-input-497-d99272d4b655> in ll_prime(n_start, n_end)
     11             c.append(number)
     12             d.append(0)
---> 13     return (list(zip(a,b)))

TypeError: 'list' object is not callable

有人能告诉我为什么我会犯这个错误吗?我已经搜索了关于stackoverflow的前一个问题,但没有一个对我的情况有帮助。你知道吗

我想要的结果是:[(3,1),(5,1),(7,1)]等等


Tags: innumberforreturnis错误zipstart
3条回答

一个问题是return命令在for循环中,因此它只执行一次。这可能就是为什么你没有得到你想要的。当我运行代码时,它返回(3,1),这只是第一组项。如果它只在for循环中运行一次然后返回,那么这是有意义的。试试这个:

 mb = [3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61]
list1 = []
list2 = []                                             
def prime():
    for i in mb:
        list1.append(i)
        list2.append(1)
        print(str(len(list1)))
        print(str(len(list2)))
    return (list(zip(list1,list2)))

当我运行时,我得到了正确的答案

您可以使用列表:

def l1_prime():
    return [(i, 1) for i in mb]

您可以使用来自itertools^{}并将其与您的列表压缩。你知道吗

>>> from itertools import repeat
>>> mb = [3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61]
>>> zip(mb, repeat(1))
[(3, 1), (5, 1), (7, 1), (11, 1), (13, 1), (17, 1), (19, 1), (23, 1), (29, 1), (31, 1), (37, 1), (41, 1), (43, 1), (47, 1), (53, 1), (59, 1), (61, 1)]

或者你可以使用这样的列表:

>>> [(x, 1) for x in mb]
[(3, 1), (5, 1), (7, 1), (11, 1), (13, 1), (17, 1), (19, 1), (23, 1), (29, 1), (31, 1), (37, 1), (41, 1), (43, 1), (47, 1), (53, 1), (59, 1), (61, 1)]

到您的解决方案:在解决方案中,您在第一次循环迭代后返回结果。所以它还没有正确的值。试着把回路移到你的回路之外。你知道吗

相关问题 更多 >