问的问题是:
使用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)
我尝试了,但得到整数作为答案而不是我想要的字符串.
注意:这里的几个答案假设你想要的是选择列表中小写的值.这个答案假设这是一个例子,你要做的事情是选择列表中每个其他列表索引出现的值.(在我看来这是正确的解释,因为这就是问题中的实现似乎试图做的.)我不确定是谁在这里误解了这个问题,但是因为问题可以通过多种方式解释,我认为这个问题可能是错误的.在问题得到澄清之前,我认为它应该暂停.
最简单,最快速的方法是使用切片:
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)
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)
你的清单理解:
[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)
这避免了必须完全使用索引.
归档时间: |
|
查看次数: |
129 次 |
最近记录: |