Python 如何使用列表理解从列表中仅获取小写字符串

Python 如何使用列表理解从列表中仅获取小写字符串,python,Python,问题是: 使用列表理解生成仅包含my_列表中小写字母的列表。打印结果列表 ['a', 'A', 'b', 'B', 'c', 'C', 'd', 'D'] 我的代码: 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) 我试过了,但得到的答案是整数,而不是我想要的字符串 注意:这里有几个答案假设您想

问题是:

使用列表理解生成仅包含my_列表中小写字母的列表。打印结果列表

['a', 'A', 'b', 'B', 'c', 'C', 'd', 'D']
我的代码:

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)

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

注意:这里有几个答案假设您想要的是在列表中选择小写的值。这个答案假设这是一个示例,您要做的是选择列表中每隔一个列表索引出现的值。(在我看来,这似乎是正确的解释,因为问题中的实现似乎正试图这样做。)我不确定是谁误解了这个问题,但由于这个问题可以用多种方式解释,我认为这个问题可能是错误的。在问题澄清之前,我认为应该暂缓

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

print(my_list[::2])  # Slice the whole list, with step=2
要复制您正在描述的逻辑,其中您希望采用索引为模2的值,那么您需要为理解中的列表生成索引和值,并使用一个用于过滤,另一个用于结果:

hi = [ch for ix, ch in enumerate(my_list) if ix % 2 == 0]

您可以使用列表理解,如下所示,迭代各个元素,并使用
.islower()


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']

您的列表理解:

[char for char in range(len(my_list)) if char%2 == 0]
将生成整数而不是字符。这是因为
range(len(my_list))
为您提供索引。相反,您需要获取字符

这可以通过以下方式实现:

或者是一种不太像python的方法,只使用索引
my_list

[my_list[i] for i in range(len(my_list)) if i % 2 == 0]
您也可以使用以下选项过滤掉小写字母:

这样就避免了完全使用索引

使用
islower()
函数

my_list = ['a', 'A', 'b', 'B', 'c', 'C', 'd', 'D']
res = [ char for char in  my_list if ord(char)>=97]
l = ['a', 'A', 'b', 'B', 'c', 'C', 'd', 'D']
result = [el for el in l if el.islower()]
添加创建以下范围(0,8)的范围(len(my_列表))的步骤 在本例中,char是一个整数,您可以创建一个整数列表

要生成仅包含小写字母的列表,请使用“islower”方法
hi=([char for char in my_list if char.islower()])

我编辑了这个问题的标题,因为它具有误导性,并且与问题的内容不匹配。您试图用共享的代码片段解决什么问题?它所做的与您所要求的无关您正在一个
范围
对象上循环,那么为什么您希望
char
不是
int
对象呢?
[char for char in my_list if char.islower()]
my_list = ['a', 'A', 'b', 'B', 'c', 'C', 'd', 'D']
res = [ char for char in  my_list if ord(char)>=97]
l = ['a', 'A', 'b', 'B', 'c', 'C', 'd', 'D']
result = [el for el in l if el.islower()]