python - 这个 for 循环代码(带有 `if not in` 条件)可以转换为列表理解吗?

标签 python list list-comprehension python-3.7

如何将这段代码转换为列表理解?

pangram = "The quick brown fox jumps over the lazy dog"
lst = []
for char in pangram.casefold():
    if char not in lst:
        lst.append(char)
lst.sort()
print(''.join(lst))

我尝试了以下列表理解,但它不起作用:

lst = [char for char in pangram.casefold if char not in lst]

出现以下错误

NameError: name 'lst' is not defined

请提出解决方案。

最佳答案

可以使用列表理解来破解它,但您必须首先预先定义 lst:

In [1]: pangram = "The quick brown fox jumps over the lazy dog"                                                         
In [2]: lst = []                                                                                                        
In [3]: [lst.append(char) for char in pangram.casefold() if char not in lst] 
In [5]: lst.sort()                                                                                                      
In [6]: print(''.join(lst))                                                                                             
 abcdefghijklmnopqrstuvwxyz

但是,这确实不是一种好的做法,因为列表推导式是用于创建列表的,而不是用于改变现有的列表。在此解决方案中,您实际上是在创建一个 None 列表,因为 .append() 返回 None

如果目标只是获得唯一值顺序并不重要,请使用 set反而。 (我认为顺序并不重要,因为您是在之后排序它的)。

In [29]: pangram = "aAaabBBbbcCc"                                                                                       

In [30]: lst = list(set(pangram.casefold()))                                                                            
In [31]: lst.sort()                                                                                                     
In [32]: print(''.join(lst))                                                                                            
abc

In [33]: lst = []                                                                                                       
In [34]: [lst.append(char) for char in pangram.casefold() if char not in lst]                                           
Out[34]: [None, None, None]
In [35]: lst.sort()                                                                                                     
In [36]: print(''.join(lst))                                                                                            
abc

关于python - 这个 for 循环代码(带有 `if not in` 条件)可以转换为列表理解吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62356023/

相关文章:

python - 转移多个日期列的优雅方式 - Pandas

python - 未解压缩的 40GB tar.gz 文件中的行数?

java - 优化android中列表的支持

c# - 列表的交集

python - 有没有更简单的方法来转换这些 python 对象

python - Python 中的理解以从列表中采样元组

python - groupby 数据帧和原始数据帧之间的左合并带来了外部合并

python - 使用 smtp python 发送邮件有更多选项

Java:如何根据文件创建数组列表

python - 连续出现两次的列表推导式