[英]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))
首先,您最好明智地命名變量。 代替G
和F
, letter
和strings
呢? 因此,您的代碼是這樣的:
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
試圖歸還iron
和indian
。 看看這樣的事情是否對您有用。
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.