我有一个简单的问题,我无法解决它。我有一个清单;
[9, 0, 3, 0, 0, 0, 2, 0, 6]
如果此列表中的元素位于digits
,我想在counter
变量中添加1。
digits = [1,2,3,4,5,6,7,8,9]
lst = [9, 0, 3, 0, 0, 0, 2, 0, 6]
现在我正在使用
digits = [1,2,3,4,5,6,7,8,9]
lst = [9, 0, 3, 0, 0, 0, 2, 0, 6]
counter = 0
for x in lst:
if x in digits:
counter += 1
我想把这个for循环写成一行。我试过了
t = counter += 1 for x in lst if x in digits
但没有按预期工作。我只是卡住了,我怎么能这样做?
答案 0 :(得分:1)
您可以通过两种可能的方式执行此操作:
counter = len([x for x in lst if x in digits])
not_digits = lambda x: x not in digits
counter = len(filter(not_digits, lst))
答案 1 :(得分:1)
我的猜测是你试图在列表推导中使用python语句而不是表达式。这不行。我认为@vaultah在他的评论中提供了一个很好的解决方案。
如果您坚持明确指定计数器,可以尝试reduce
:
if 'reduce' not in globals():
from functools import reduce
counter = 0
digits = [1,2,3,4,5,6,7,8,9]
lst = [9, 0, 3, 0, 0, 0, 2, 0, 6]
counter = reduce(lambda c, d: c + 1 if d in digits else c, lst, counter)