簡體   English   中英

Python ForLoop輸入

[英]Python ForLoop Input

基本上,我必須創建一個函數,在其中輸入2個參數:第一個參數是字母(即“ i”),第二個參數是列表(即[[trees],“ iron”,“ cars”,“ indian”] )

我的函數應返回列表中以第一個參數中相同字母開頭的所有項目。

所以我有:

def match_first_letter(G, F):
    for i in F:
        if i.F[0] == G:
            return F

其中G是第一個字母,F是列表

我不斷得到:AttributeError:'str'對象沒有屬性'L'

我做錯了什么嗎?

首先看一下這行:

for i in F:

在這里,您可以一次通過i訪問F一個元素。

因此,您應該使用i[0] (i的第一位)而不是iF[0]

其次,

您將返回list ,而不是匹配的值。

如果更正,即使有多個匹配項,您仍然只有第一個匹配項。

這是因為,您將在第一局比賽后立即返回。

您可以通過列表理解來實現預期的輸出。

def match_first_letter(G, F):
    return [i for i in F if i[0]==G]

在循環內您可以說:

if i.startswith(G):
    yield i

您可以將此函數稱為:

matches = list(match_first_letter(F, G))

首先,您最好明智地命名變量。 代替GFletterstrings呢? 因此,您的代碼是這樣的:

def match_first_letter(letter, strings):
    for current_string in strings:
        if current_string.strings[0] == letter:
            return strings

在這種情況下,您一直看到的錯誤將改為AttributeError: 'str' object has no attribute 'strings' 請注意,這與current_string.strings命令匹配。

current_string[0]是您實際要針對匹配letter測試的內容,因為這是字符串current_string的首字母。

最后,您當前正在返回列表。 相反,您應該將current_string添加到要返回的列表中。

def match_first_letter(letter, strings):
    matched_strings = []

    for current_string in strings:
        if current_string[0] == letter:
            matched_strings.append(current_string)

    return matched_strings

Python實際上有一個叫做列表推導的東西,可以很容易地做到這一點。

def match_first_letter(letter, strings):
    return [string_x for string_x in strings if string_x[0] == letter]

我建議您在上面的鏈接中閱讀有關列表的理解。

由於您已經for i in F:發言for i in F:您可以說if i[0] == G 也就是說,訪問i的第零個元素。

我相信您在上面的示例indian試圖歸還ironindian 看看這樣的事情是否對您有用。

arg1 = 'i'
arg2 = ['trees', 'iron', 'cars', 'indian']

def match_first_letter(G, F):
    for i in F:
        if i[0] == G:
            print(i)

match_first_letter(arg1, arg2)

暫無
暫無

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

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