python comprehensions中的变量/未赋予值的变量如何工作

时间:2018-09-16 20:21:41

标签: python python-3.x

s = 'coffee coke tea lemonade milk sprite'

{ c:s.count(c) for c in ''.join([ w[1:] for w in s.split() 
  if 'e' not in w[-3:-1] and 'o' in w[:4] ]) }


# (’’.join([ w[1:] for w in s.split())

w是如何通过总共有6个元素的s.split()运行的?或通过分隔字符串中的每个字母(例如'coffee'等)?为什么对这种理解{'o': 3, 'k': 2, 'e': 7, 'm': 2, 'n': 1, 'a': 2, 'd': 1}的答案。

我知道为什么它是字典,但是变量cw令我感到困惑,目前我认为这些变量的值随着循环的进行而变化,但是我不明白其他代码如何影响它们的变化。

1 个答案:

答案 0 :(得分:0)

如果您想分析某些事物的工作原理,请拆开它:

s = 'coffee coke tea lemonade milk sprite'

d = { c:s.count(c) for c in ''.join([ w[1:] for w in s.split() 
  if 'e' not in w[-3:-1] and 'o' in w[:4] ]) }

print(d)

输出:

{'o': 3, 'k': 2, 'e': 7, 'm': 2, 'n': 1, 'a': 2, 'd': 1}

让我们也参与其中:

print(list(w for w in s.split()))
print(list(w for w in s.split() if 'e' not in w[-3:-1] and 'o' in w[:4] ))
print(''.join([ w[1:] for w in s.split() if 'e' not in w[-3:-1] and 'o' in w[:4] ]))

输出:

['coffee', 'coke', 'tea', 'lemonade', 'milk', 'sprite']
['coke', 'lemonade']
okeemonade

因此:w从s.split()中获取所有值,它们是'coffee' 'coke' 'tea' 'lemonade' 'milk' {{1 }},但不会使用所有的值,只有那些通过'sprite'且为t​​rue且然后将没有第一个字符的部分传递给下一个理解的值。

第一部分遍历if 'e' not in w[-3:-1] and 'o' in w[:4]中的所有字符,并计算该字母在'okeemonade'中出现的频率。

完成。