这个 for 循环代码(带有 `if not in` 条件)可以转换为列表理解吗?
Can this for loop code(with an `if not in` condition) be converted to list comprehension?
如何将此代码转换为列表理解?
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()
returns None
.
如果目标只是获取唯一值 并且 顺序并不重要,请改用 set
。 (我认为顺序并不重要,因为你 sort
它之后)。
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
不需要列表或理解。使用 set
自动消除重复项。
>>> pangram = "The quick brown fox jumps over the lazy dog"
>>> letters = set(pangram.casefold()) # the unique letters in pangram
>>> ''.join(sorted(letters))
' abcdefghijklmnopqrstuvwxyz'
原则上,for
循环可以转换为列表理解。这通过使用第二个 set
或 list
并利用 lst.append
/set.add
returns None
来实现,这允许在使用时评估第二个表达式or
.
>>> pangram = "The quick brown fox jumps over the lazy dog"
>>> seen = set()
>>> lst = [seen.add(char) or char for char in pangram.casefold() if char not in seen]
>>> lst.sort()
>>> ' abcdefghijklmnopqrstuvwxyz'
一个班轮可能是:
"".join([letter for letter in sorted(set(pangram.casefold()))])
如何将此代码转换为列表理解?
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()
returns None
.
如果目标只是获取唯一值 并且 顺序并不重要,请改用 set
。 (我认为顺序并不重要,因为你 sort
它之后)。
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
不需要列表或理解。使用 set
自动消除重复项。
>>> pangram = "The quick brown fox jumps over the lazy dog"
>>> letters = set(pangram.casefold()) # the unique letters in pangram
>>> ''.join(sorted(letters))
' abcdefghijklmnopqrstuvwxyz'
原则上,for
循环可以转换为列表理解。这通过使用第二个 set
或 list
并利用 lst.append
/set.add
returns None
来实现,这允许在使用时评估第二个表达式or
.
>>> pangram = "The quick brown fox jumps over the lazy dog"
>>> seen = set()
>>> lst = [seen.add(char) or char for char in pangram.casefold() if char not in seen]
>>> lst.sort()
>>> ' abcdefghijklmnopqrstuvwxyz'
一个班轮可能是:
"".join([letter for letter in sorted(set(pangram.casefold()))])