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

时间:2018-12-26 18:53:10

标签: python

问的问题:

使用列表推导生成一个仅包含my_list中小写字母的列表。打印结果列表。

['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)

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

7 个答案:

答案 0 :(得分:5)

注意:这里的几个答案假设您要选择的是列表中的小写值。该答案假定这是一个示例,并且您要尝试做的是选择列表中每个其他列表索引处出现的值。 (在我看来这是正确的解释,因为这就是问题中的实现似乎正在尝试执行的操作。)我不确定谁在这里误解了该问题,但是由于该问题可以可以用多种方式来解释,我认为这里的问题可能是错误的。在问题得到澄清之前,我认为应该将其搁置。

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

print(my_list[::2])  # Slice the whole list, with step=2

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

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

答案 1 :(得分:5)

您的列表理解:

[char for char in range(len(my_list)) if char%2 == 0]

将产生整数而不是字符。这是因为range(len(my_list))为您提供了索引。相反,您需要获取字符。

这可以使用enumerate()完成:

 [char for i, char in enumerate(my_list) if i % 2 == 0]

或者仅使用索引my_list的Python语言:

[my_list[i] for i in range(len(my_list)) if i % 2 == 0]

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

[char for char in my_list if char.islower()]

避免完全使用索引。

答案 2 :(得分:4)

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

答案 3 :(得分:2)

您可以按照以下方式使用列表推导,在其中迭代各个元素并使用.islower()

检查它是否为小写字母
my_list = ['a', 'A', 'b', 'B', 'c', 'C', 'd', 'D']

lower = [i for i in my_list if i.islower()]
# ['a', 'b', 'c', 'd']

答案 4 :(得分:0)

my_list = ['a', 'A', 'b', 'B', 'c', 'C', 'd', 'D']
res = [ char for char in  my_list if ord(char)>=97]

答案 5 :(得分:0)

使用islower()函数

l = ['a', 'A', 'b', 'B', 'c', 'C', 'd', 'D']
result = [el for el in l if el.islower()]

答案 6 :(得分:0)

添加一个范围(len(my_list)),以创建以下范围(0,8) 并且在这种情况下,char是一个整数,您将创建一个整数列表。

要生成仅包含小写字母的列表,请使用“ islower”方法 嗨=([[char_islower()中char为my_list中的char)]