簡體   English   中英

如何在我的列表理解中使用 else 語句?

[英]How can I use an else statement in my list comprehension?

我知道有很多關於列表理解的問題,但我似乎找不到適合我的問題的問題。

我只想返回字符串列表中一個特定字符的索引。

char_list = ['H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!']

def get_index(c, char_list):
    return [index for index in range(len(char_list)) if c == char_list[index]]

get_index('r', char_list)
# This returns [9] which is what I want. 

前面的列表理解可以做到這一點,但我想在其中編寫一個 else 語句,如果傳入的字符串不存在於列表中,則返回 [-1]。

我看過這個問題( 如果在列表理解中),它提到了一個我試圖在這里寫出的解決方案:

def get_index(c, char_list):
    return [index if c == char_list[index] else -1 for index in range(len(char_list))]
    
get_index(';', char_list)
# This returns a list equal to the length of char_list 
# returns [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
# The else statement before -1 loops through the entire list and makes a list equal in length


# I want to just return [-1].

如果我將 else 語句放在列表理解的最后,它會引發和錯誤。

如何在我的列表推導式中放置一個 else 語句,以便在傳入的字符不存在於列表中時返回 [-1],如果字符存在於列表中則返回 [index]。 這可能嗎?

這並沒有考慮到列表中可能存在多個特定字符的計數。 所以在某些方面,這樣做有點愚蠢,但我對練習列表理解很感興趣

你為什么做這個? 有一個built-in函數可以在名為index的列表中查找元素的index

char_list = ['H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!']
char_list.index('r') -> 9

如果沒有匹配項,您的列表推導會生成一個空列表——因此您的函數只需要返回[-1]代替空列表,而不是修改生成列表的方式。 or運算符是一種返回“默認值”代替假值(如空列表)的簡單方法:

>>> def get_index(c, char_list):
...     return [index for index in range(len(char_list)) if c == char_list[index]] or [-1]
...
>>> get_index('r', char_list)
[9]
>>> get_index(';', char_list)
[-1]

我不建議使用列表理解,因為列表在這里沒有用,所以使用帶有if語句的.index方法來獲取輸出 -

char_list = ['H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!']

def get_index(c, char_list):
    if c in char_list:
        return char_list.index(c)
    return -1

a = get_index('r', char_list)
print(a)

暫無
暫無

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

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