Python在一行代码中更改变量的值for

时间:2016-05-16 17:03:30

标签: python for-loop

我有一个简单的问题,我无法解决它。我有一个清单;

[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

但没有按预期工作。我只是卡住了,我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

您可以通过两种可能的方式执行此操作:

  1. List Comprehensions
  2. counter = len([x for x in lst if x in digits])
    
    1. 函数:filter(函数,列表),它提供了一种优雅的方法来过滤掉列表的所有元素,函数函数返回True。
    2.     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)