如何在 python 函数中仅从列表理解中获取值?
How get only the values from list comprehension in a python function?
这是一个列表,n_list
n_list = [2, 4, 4, 5, 2, 1, 7, 1, 9]
问题陈述:
我想从列表理解中得到结果,但输出应该只是值,而不是列表。基本上,结果无需为其编写单独的 for 循环。
简单的解决方案,但不是我想要的:
如果我只需要打印结果,我可以这样做,使用 *
:
print(*[val for val in n_list if n_list.count(val) == 1])
当前问题:
但是,将其应用于函数时出现错误:
def singleVal(n_list):
return(*[val for val in n_list if n_list.count(val) ==1])
singleVal(n_list)
Error: Can’t use started expression here.
有什么方法可以只从函数中的列表理解中获取值吗?
预期输出:
最终,应该是类似于下面的代码,但在函数形式中并使用列表理解方法:
result = [val for val in a if a.count(val) ==1]
for i in result:
return I
Return:
int: the element that occurs only once
def singleVal(L):
result = [str(val) for val in L if L.count(val)==1]
return '\n'.join(result)
这里最简单的做法是return列表,然后使用*
运算符打印它:
def singleVal(n_list):
return [val for val in n_list if n_list.count(val) == 1]
print(*singleVal([2, 4, 4, 5, 2]))
# 5
如果您非常确定return只有一个值,您可以将您的函数编写为仅return那个值,例如:
def singleVal(n_list):
return next(val for val in n_list if n_list.count(val) == 1)
print(singleVal([2, 4, 4, 5, 2]))
# 5
请注意,如果 n_list
中有多个唯一值,则上述版本的 singleVal
只会 return 第一个唯一值,并且会引发 StopIteration
如果唯一值为零。
如果你想让你的函数return以单个字符串的形式出现列表,你可以使用join
:
def singleVal(n_list):
return " ".join(str(val) for val in n_list if n_list.count(val) == 1)
print(singleVal([2, 4, 4, 5, 2]))
# 5
请注意,将结果转换为字符串可以轻松打印,但很难用它做任何其他事情(您需要使用 split()
和 int()
将其转换回数值列表)。
如果您希望函数只打印结果而不是 return 打印结果,请将 print
放在函数内部,不要 return 任何东西:
def singleVal(n_list):
print(*(val for val in n_list if n_list.count(val) == 1))
singleVal([2, 4, 4, 5, 2])
# 5
这是一个列表,n_list
n_list = [2, 4, 4, 5, 2, 1, 7, 1, 9]
问题陈述:
我想从列表理解中得到结果,但输出应该只是值,而不是列表。基本上,结果无需为其编写单独的 for 循环。
简单的解决方案,但不是我想要的:
如果我只需要打印结果,我可以这样做,使用 *
:
print(*[val for val in n_list if n_list.count(val) == 1])
当前问题:
但是,将其应用于函数时出现错误:
def singleVal(n_list):
return(*[val for val in n_list if n_list.count(val) ==1])
singleVal(n_list)
Error: Can’t use started expression here.
有什么方法可以只从函数中的列表理解中获取值吗?
预期输出:
最终,应该是类似于下面的代码,但在函数形式中并使用列表理解方法:
result = [val for val in a if a.count(val) ==1]
for i in result:
return I
Return:
int: the element that occurs only once
def singleVal(L):
result = [str(val) for val in L if L.count(val)==1]
return '\n'.join(result)
这里最简单的做法是return列表,然后使用*
运算符打印它:
def singleVal(n_list):
return [val for val in n_list if n_list.count(val) == 1]
print(*singleVal([2, 4, 4, 5, 2]))
# 5
如果您非常确定return只有一个值,您可以将您的函数编写为仅return那个值,例如:
def singleVal(n_list):
return next(val for val in n_list if n_list.count(val) == 1)
print(singleVal([2, 4, 4, 5, 2]))
# 5
请注意,如果 n_list
中有多个唯一值,则上述版本的 singleVal
只会 return 第一个唯一值,并且会引发 StopIteration
如果唯一值为零。
如果你想让你的函数return以单个字符串的形式出现列表,你可以使用join
:
def singleVal(n_list):
return " ".join(str(val) for val in n_list if n_list.count(val) == 1)
print(singleVal([2, 4, 4, 5, 2]))
# 5
请注意,将结果转换为字符串可以轻松打印,但很难用它做任何其他事情(您需要使用 split()
和 int()
将其转换回数值列表)。
如果您希望函数只打印结果而不是 return 打印结果,请将 print
放在函数内部,不要 return 任何东西:
def singleVal(n_list):
print(*(val for val in n_list if n_list.count(val) == 1))
singleVal([2, 4, 4, 5, 2])
# 5