python comprehensions中的变量/如何给变量赋值不起作用

问题描述 投票:-3回答:1
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()运行?或通过分隔字符串中的每个字母(例如“咖啡”等)?为什么这个理解{'o': 3, 'k': 2, 'e': 7, 'm': 2, 'n': 1, 'a': 2, 'd': 1}的答案。

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

python python-3.x
1个回答
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' 'sprite'但不是所有的vaues都被使用,只有那些通过if 'e' not in w[-3:-1] and 'o' in w[:4]与真正的AND然后没有第一个字符的部分被送到下一部分理解。

第一部分迭代'okeemonade'中的所有字符,并计算这个字母在s内发生的频率。

完成。

© www.soinside.com 2019 - 2024. All rights reserved.