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

如何将Python for循环作为三元运算符编写,python,python-3.x,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") el

我有以下代码:

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


有没有一种方法可以将其作为三元运算符写入更紧凑的代码?

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

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

否则,不能使用条件表达式切换变量。

将变量放入字典,然后可以更改分配给的键:

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

否则不能使用条件表达式切换变量。

无法更改赋值左侧的变量。但是,您可以使用全局技巧指定全局变量,尽管这是不受欢迎的,因此永远不要这样做:

对于大多数性能代码,可以将计数收集到一个包含2个项的列表中,并在aeiou中通过char对其进行索引,aeiou将选择索引1,因为True==1!对于元音,索引0为False==0表示辅音;然后将这些数据解包为所需的变量。此外,单词列表的长度将保持不变,但由于Python无法知道这一点,因此如果将lenword\u列表置于循环之外,代码的性能会更好:

counts = [0, 0]
length = len(word_list)
for itr, char in enumerate(word_list):
    counts[char in "aeiou"] += length - itr

stuart, kevin = counts

无法更改赋值左侧的变量。但是,您可以使用全局技巧指定全局变量,尽管这是不受欢迎的,因此永远不要这样做:

对于大多数性能代码,可以将计数收集到一个包含2个项的列表中,并在aeiou中通过char对其进行索引,aeiou将选择索引1,因为True==1!对于元音,索引0为False==0表示辅音;然后将这些数据解包为所需的变量。此外,单词列表的长度将保持不变,但由于Python无法知道这一点,因此如果将lenword\u列表置于循环之外,代码的性能会更好:

counts = [0, 0]
length = len(word_list)
for itr, char in enumerate(word_list):
    counts[char in "aeiou"] += length - itr

stuart, kevin = counts

不,这是不可能的。赋值的左侧不能是表达式。可能与否重复,这是不可能的。作业的左边不能是表达式。我想这可能是重复的,回答了OP的问题,但它不太优雅哎呀,千万别那样做。我想这回答了OP的问题,但并不十分优雅哎哟,千万别那么做。
    kevin, stuart = ( kevin + len(word_list) - itr, stuart ) if char in "aeiou" else ( kevin, stuart + len(word_list) - itr )