我有以下代码:
stuart = 0
kevin = 0
for itr, char in enumerate(word_list):
if char in "aeiou":
kevin += len(word_list) - itr
else:
stuart += len(word_list) - itr
Run Code Online (Sandbox Code Playgroud)
我可以将if/else语句写成三元运算符吗?
我尝试了以下无济于事:
(kevin if (char in "aeiou") else stuart) += len(word_list) - itr
Run Code Online (Sandbox Code Playgroud)
和
kevin += len(word_list) - itr if char in "aeiou" else stuart += len(word_list) - itr
Run Code Online (Sandbox Code Playgroud)
有没有办法将其作为三元运算符编写为更紧凑的代码?
将变量放在字典中,然后您可以改变分配给的键:
names = {'stuart': 0, 'kevin': 0}
for itr, char in enumerate(word_list):
names['kevin' if char in "aeiou" else 'stuart'] += len(word_list) - itr
Run Code Online (Sandbox Code Playgroud)
否则,您无法使用条件表达式来切换变量.
无法更改赋值左侧的变量.但是你可以使用这个globals()技巧来分配一个全局变量,虽然这是不受欢迎的,因此永远不会这样做:
stuart = 0
kevin = 0
globs = globals()
for itr, char in enumerate(word_list):
globs['kevin' if char in 'aeiou' else 'stuart'] += len(word_list) - itr
Run Code Online (Sandbox Code Playgroud)
对于大多数性能代码,可以在2个项目的列表中收集计数,并将它们编入索引char in "aeiou",选择索引1(因为True == 1!)用于元音,索引0(as False == 0)用于辅音; 然后解压缩到所需的变量.此外,长度word_list将是常量,但由于Python无法知道这一点,如果len(word_list)放在循环之外,代码将表现得更好:
counts = [0, 0]
length = len(word_list)
for itr, char in enumerate(word_list):
counts[char in "aeiou"] += length - itr
stuart, kevin = counts
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
528 次 |
| 最近记录: |