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}
的答案。
我知道为什么它是字典,但是变量c
和w
令我感到困惑,目前我认为这些变量的值随着循环的进行而变化,但是我不明白其他代码如何影响它们的变化。
答案 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'
且为true且然后将没有第一个字符的部分传递给下一个理解的值。
第一部分遍历if 'e' not in w[-3:-1] and 'o' in w[:4]
中的所有字符,并计算该字母在'okeemonade'
中出现的频率。
完成。