如何在Python函数中只获取列表解析的值?

nbnkbykc  于 2023-05-08  发布在  Python
关注(0)|答案(3)|浏览(170)

下面是一个列表,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)

错误:无法在此处使用启动表达式。
有没有办法在函数中只获取列表解析的值?

预期输出

最终,应该类似于以下代码,但以函数形式并使用列表解析方法:

result = [val for val in a if a.count(val) ==1]
    for i in result:
       return I

返回

int:只出现一次的元素

nbewdwxp

nbewdwxp1#

这里最简单的做法是返回列表,然后使用*操作符打印它:

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

如果你非常确定只返回一个值,你可以写一个函数只返回一个值,例如:

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将仅返回第一个唯一值,如果没有唯一值,则将引发StopIteration
如果你想让你的函数以单个字符串的形式返回列表,你可以使用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()将其转换回数值列表)。
如果你想让函数只输出结果而不返回结果,把print放在函数内部,不要让它返回任何东西:

def singleVal(n_list):
    print(*(val for val in n_list if n_list.count(val) == 1))

singleVal([2, 4, 4, 5, 2])
# 5
fd3cxomn

fd3cxomn2#

def singleVal(L):
    result = [str(val) for val in L if L.count(val)==1]
    return '\n'.join(result)
x6h2sr28

x6h2sr283#

您可以使用元组解包,在左侧使用一个元素元组:

result_list = [val for val in n_list if n_list.count(val) ==1]
singleVal, = result_list  # the comma makes the LHS a tuple
return singleVal

如果result_list不包含正好一个元素,这将抛出一个错误:ValueError: too many values to unpack (expected 1),如果有多个元素,或者ValueError: not enough values to unpack (expected 1, got 0),如果列表为空。

相关问题