如何将这个Python for循环编写为三元运算符

时间:2016-07-05 20:25:25

标签: python python-3.x

我有以下代码:

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

我可以将if / else语句写成三元运算符吗?

我尝试了以下内容无济于事:

(kevin if (char in "aeiou") else stuart) += len(word_list) - itr

kevin += len(word_list) - itr if char in "aeiou" else stuart += len(word_list) - itr

有没有办法将其写为三元运算符以获得更紧凑的代码?

3 个答案:

答案 0 :(得分:9)

将变量放在字典中,然后您可以改变分配给的

names = {'stuart': 0, 'kevin': 0}
for itr, char in enumerate(word_list):
    names['kevin' if char in "aeiou" else 'stuart'] += len(word_list) - itr

否则,您无法使用条件表达式来切换变量。

答案 1 :(得分:5)

无法更改作业左侧的变量。但是你可以使用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

对于大多数性能代码,可以在2个项目的列表中收集计数,并按char in "aeiou"对其进行索引,这将为元音和索引0选择索引1(因为True == 1!)(如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

答案 2 :(得分:1)

    kevin, stuart = ( kevin + len(word_list) - itr, stuart ) if char in "aeiou" else ( kevin, stuart + len(word_list) - itr )