如何将函数的结果添加到 python 中的列表?
How can I add the outcome of a function to a list in python?
def b():
a = int(input("Look up to: ")) // set the range to scan for primes
for num in range(0, a):
if prime(num) == True:
print(num)
print("adding to list")
return num
list = [num]
list.append(num)
else:
print(num, "is not a prime")
那么如何为每个新素数将结果附加到 "list"?
忘记提及检查 num 是否为素数的函数:
def prime(num):
for j in range (2, num):
if (num % j) == 0 :
return False
return True
几点:
一旦 return
被执行,它所应用的值将 returned 给调用该函数的任何人,并且 return 之后的代码永远不会执行。
是一个新列表 return
通过调用 [num]
不断 重建 列表,这是一个 shorthand 用于创建 new 列表仅包含 num
。你想要做的是 update 它使用 append
.
修复代码,它可能类似于:
def get_primes():
a = int(input("Look up to: "))
# 'primes' is a more suitable name for a list of primes
# we're only creating the list *once*, and we're not shadowing 'list'
primes = list()
for candidate in range(0, a):
if prime(candidate) == True:
print(candidate)
print("adding to list")
primes.append(candidate)
else:
print(num, "is not a prime")
# use return to return a result
return primes
您可以通过调用 get_primes()
来测试它。
提示: 你可以使用 filter
做同样的事情 get_primes
做:
a = int(input("Look up to: "))
print(filter(prime, range(0, a)))
关于 list
和 []
之间区别的一个小说明是,您可以更改 list
的行为,从而提供更好的控制,而 []
生成的代码直接调用 BUILD_LIST
(更难更改):
>>> dis.dis(lambda: [])
1 0 BUILD_LIST 0
3 RETURN_VALUE
>>> dis.dis(lambda: list())
1 0 LOAD_GLOBAL 0 (list)
3 CALL_FUNCTION 0
6 RETURN_VALUE
在这种情况下确实无关紧要,但@Thrustmaster 建议在评论中使用 []
,因为有些人可能认为它更清洁。
你快到了。您的代码的奇怪之处在于您放置 return
语句的位置。试试这个:
def b():
primesList = []
a = int(input("Look up to: "))
for num in range(0, a):
if prime(num) == True:
print(num)
print("adding to list")
primesList.append(num)
else:
print(num, "is not a prime")
return primesList
请注意,您的原始 return 语句会提前 结束您的函数 ,事实上甚至在您的列表有机会追加 之前任何素数。这里的另一个重点是你永远不应该隐藏一个内置类型(在这种情况下为 list
),或其他内置函数(如 map
、sorted
等) .
只需初始化 primesList
一次并将 num
整数附加到 for loop
.
中也足够了
您的代码看起来是 C 和 Python 的混合体(不要使用 // 作为注释)。
我假设您的程序正在寻找最大为 n 的素数。以下是如何实现这一点:
import math
def is_prime(n):
if n % 2 == 0 and n > 2:
return False
for i in range(3, int(math.sqrt(n)) + 1, 2):
if n % i == 0:
return False
return True
def find_primes(a, b):
primes = []
for i in range(a, b):
if is_prime(i):
primes.append(i)
return primes
哦,很多小语法错误。让我list
他们下来..
- Python 评论不是以
//
开头,而是以 #
开头。参考代码行号:2
- list 是 python 中的关键字,您不应在变量声明中使用它。行参考:8.
- 在你做了return之后,那一行之后的代码将不会被执行。行参考:7.
- 您不应该在
for
循环中初始化列表。它在每次迭代中都被初始化。
- 而不是
if prim(num) == True:
,您可以简单地写 if prim(num):
。
也就是说,正确的代码应该如下所示:
def b():
a = int(input("Look up to: ")) # set the range to scan for primes
primes = [] #Your list
for num in range(0, a):
if prime(num):
print(num)
print("adding to list")
primes.append(num)
else:
print(num, "is not a prime")
return primes
希望对您有所帮助.. :)
其他答案很好,解决了您在重新绑定列表变量和未能return函数b()
中的素数列表时遇到的主要问题。
我认为值得一提的是,可以使用列表理解来简洁地编写素数列表生成代码:
def prime(num):
for j in range (2, num):
if (num % j) == 0 :
return False
return True
def get_primes(low, high):
return [n for n in range(low, high+1) if prime(n)]
>>> a = input("Look up to: ")
11
>>> get_primes(0, a)
[0, 1, 2, 3, 5, 7, 11]
>>> get_primes(5, a)
[5, 7, 11]
备注:
- 将 "up to" 值传递给函数比
在函数中提示它。
- "Up to" 应该是包容性的,例如get_primes(0, 11) 应该在结果中包含 11。因此调用
range()
. 时需要在上限值上加一
- 传递
low
和 high
允许您生成任意范围的素数。
- 您可以用
set()
包装列表推导式,将结果 return 编辑为一个集合。
def b():
a = int(input("Look up to: ")) // set the range to scan for primes
for num in range(0, a):
if prime(num) == True:
print(num)
print("adding to list")
return num
list = [num]
list.append(num)
else:
print(num, "is not a prime")
那么如何为每个新素数将结果附加到 "list"?
忘记提及检查 num 是否为素数的函数:
def prime(num):
for j in range (2, num):
if (num % j) == 0 :
return False
return True
几点:
一旦
return
被执行,它所应用的值将 returned 给调用该函数的任何人,并且 return 之后的代码永远不会执行。- 是一个新列表 return
通过调用
[num]
不断 重建 列表,这是一个 shorthand 用于创建 new 列表仅包含num
。你想要做的是 update 它使用append
.
修复代码,它可能类似于:
def get_primes():
a = int(input("Look up to: "))
# 'primes' is a more suitable name for a list of primes
# we're only creating the list *once*, and we're not shadowing 'list'
primes = list()
for candidate in range(0, a):
if prime(candidate) == True:
print(candidate)
print("adding to list")
primes.append(candidate)
else:
print(num, "is not a prime")
# use return to return a result
return primes
您可以通过调用 get_primes()
来测试它。
提示: 你可以使用 filter
做同样的事情 get_primes
做:
a = int(input("Look up to: "))
print(filter(prime, range(0, a)))
关于 list
和 []
之间区别的一个小说明是,您可以更改 list
的行为,从而提供更好的控制,而 []
生成的代码直接调用 BUILD_LIST
(更难更改):
>>> dis.dis(lambda: [])
1 0 BUILD_LIST 0
3 RETURN_VALUE
>>> dis.dis(lambda: list())
1 0 LOAD_GLOBAL 0 (list)
3 CALL_FUNCTION 0
6 RETURN_VALUE
在这种情况下确实无关紧要,但@Thrustmaster 建议在评论中使用 []
,因为有些人可能认为它更清洁。
你快到了。您的代码的奇怪之处在于您放置 return
语句的位置。试试这个:
def b():
primesList = []
a = int(input("Look up to: "))
for num in range(0, a):
if prime(num) == True:
print(num)
print("adding to list")
primesList.append(num)
else:
print(num, "is not a prime")
return primesList
请注意,您的原始 return 语句会提前 结束您的函数 ,事实上甚至在您的列表有机会追加 之前任何素数。这里的另一个重点是你永远不应该隐藏一个内置类型(在这种情况下为 list
),或其他内置函数(如 map
、sorted
等) .
只需初始化 primesList
一次并将 num
整数附加到 for loop
.
您的代码看起来是 C 和 Python 的混合体(不要使用 // 作为注释)。 我假设您的程序正在寻找最大为 n 的素数。以下是如何实现这一点:
import math
def is_prime(n):
if n % 2 == 0 and n > 2:
return False
for i in range(3, int(math.sqrt(n)) + 1, 2):
if n % i == 0:
return False
return True
def find_primes(a, b):
primes = []
for i in range(a, b):
if is_prime(i):
primes.append(i)
return primes
哦,很多小语法错误。让我list
他们下来..
- Python 评论不是以
//
开头,而是以#
开头。参考代码行号:2 - list 是 python 中的关键字,您不应在变量声明中使用它。行参考:8.
- 在你做了return之后,那一行之后的代码将不会被执行。行参考:7.
- 您不应该在
for
循环中初始化列表。它在每次迭代中都被初始化。 - 而不是
if prim(num) == True:
,您可以简单地写if prim(num):
。
也就是说,正确的代码应该如下所示:
def b():
a = int(input("Look up to: ")) # set the range to scan for primes
primes = [] #Your list
for num in range(0, a):
if prime(num):
print(num)
print("adding to list")
primes.append(num)
else:
print(num, "is not a prime")
return primes
希望对您有所帮助.. :)
其他答案很好,解决了您在重新绑定列表变量和未能return函数b()
中的素数列表时遇到的主要问题。
我认为值得一提的是,可以使用列表理解来简洁地编写素数列表生成代码:
def prime(num):
for j in range (2, num):
if (num % j) == 0 :
return False
return True
def get_primes(low, high):
return [n for n in range(low, high+1) if prime(n)]
>>> a = input("Look up to: ")
11
>>> get_primes(0, a)
[0, 1, 2, 3, 5, 7, 11]
>>> get_primes(5, a)
[5, 7, 11]
备注:
- 将 "up to" 值传递给函数比 在函数中提示它。
- "Up to" 应该是包容性的,例如get_primes(0, 11) 应该在结果中包含 11。因此调用
range()
. 时需要在上限值上加一
- 传递
low
和high
允许您生成任意范围的素数。 - 您可以用
set()
包装列表推导式,将结果 return 编辑为一个集合。