如何使用列表推导从列表中仅获取小写字符串

Ade*_*ain 0 python

问的问题是:

使用list comprehensions生成一个只包含my_list中小写字母的列表.打印结果列表.

['a', 'A', 'b', 'B', 'c', 'C', 'd', 'D']
Run Code Online (Sandbox Code Playgroud)

我的代码:

my_list = ['a', 'A', 'b', 'B', 'c', 'C', 'd', 'D']
hi = ([ char for char in range(len(my_list)) if char%2 == 0])

print(hi)
Run Code Online (Sandbox Code Playgroud)

我尝试了,但得到整数作为答案而不是我想要的字符串.

Dan*_*den 6

注意:这里的几个答案假设你想要的是选择列表中小写的值.这个答案假设这是一个例子,你要做的事情是选择列表中每个其他列表索引出现的值.(在我看来这是正确的解释,因为这就是问题中的实现似乎试图做的.)我不确定是谁在这里误解了这个问题,但是因为问题可以通过多种方式解释,我认为这个问题可能是错误的.在问题得到澄清之前,我认为它应该暂停.

最简单,最快速的方法是使用切片:

print(my_list[::2])  # Slice the whole list, with step=2
Run Code Online (Sandbox Code Playgroud)

要复制您正在描述的逻辑,您想要使用模2的索引获取值,那么您需要在理解中生成列表的索引和值,并使用一个用于过滤,另一个用于过滤结果:

hi = [ch for ix, ch in enumerate(my_list) if ix % 2 == 0]
Run Code Online (Sandbox Code Playgroud)

  • @AdeeshJain:为什么?您不是因为喜欢它而使用特定的语法构造,而是因为它解决了问题. (2认同)

Dee*_*ace 5

Python字符串具有islower方法。另外,您可以直接遍历列表,而无需检查其长度或索引的奇偶性。

my_list = ['a', 'A', 'b', 'B', 'c', 'C', 'd', 'D']
hi = [char for char in my_list if char.islower()]
print(hi)
# ['a', 'b', 'c', d']
Run Code Online (Sandbox Code Playgroud)

  • 我们同步地在并行宇宙中工作;) (2认同)

Roa*_*ner 5

你的清单理解:

[char for char in range(len(my_list)) if char%2 == 0]
Run Code Online (Sandbox Code Playgroud)

将产生整数而不是字符.这是因为range(len(my_list))给你索引.你需要得到角色.

这可以使用enumerate():

 [char for i, char in enumerate(my_list) if i % 2 == 0]
Run Code Online (Sandbox Code Playgroud)

或者是一种不那么pythonic的方法,只使用索引my_list:

[my_list[i] for i in range(len(my_list)) if i % 2 == 0]
Run Code Online (Sandbox Code Playgroud)

您也可以使用以下方法过滤掉小写字母str.islower():

[char for char in my_list if char.islower()]
Run Code Online (Sandbox Code Playgroud)

这避免了必须完全使用索引.