如何在 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