簡體   English   中英

如何使用列表理解僅從列表中獲取小寫字符串

[英]How to get only lowercase strings from a list using list comprehension

問的問題:

使用列表推導生成僅包含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)

我嘗試了一下,但是得到了整數作為答案,而不是我想要的字符串。

注意:此處的幾個答案均假設您要選擇的是列表中的小寫字母值。 該答案假設這是一個示例,並且您要嘗試的是選擇列表中每個其他列表索引處出現的值。 (在我看來這是正確的解釋,因為這就是問題中的實現似乎試圖做的。)我不確定誰在這里誤解了這個問題,但是由於可以用多種方式解釋該問題,我認為這個問題可能在這里錯了。 在問題得到澄清之前,我認為應該擱置它。

最簡單,最快的方法是切片:

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]

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))給您索引。 相反,您需要獲取字符。

這可以使用enumerate()

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

或使用較少的pythonic方法,僅使用索引my_list

[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()]

這樣可以避免完全使用索引。

您可以按照以下方式使用列表理解,在其中迭代各個元素並使用.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']
my_list = ['a', 'A', 'b', 'B', 'c', 'C', 'd', 'D']
res = [ char for char in  my_list if ord(char)>=97]

使用islower()函數

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

要添加創建以下范圍(0,8)的范圍(len(my_list)),在這種情況下,char是一個整數,您將創建一個整數列表。

要生成僅包含小寫字母的列表,請使用“ islower”方法hi =([[char_islower()中char為my_list中的char])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM