2015-10-19 73 views
-1

基本上我必须创建一个函数,我输入2个参数: 第一个是字母(即'i') 第二个是列表(即['trees','iron', 'cars','indian'])Python ForLoop输入

我的函数应该返回列表中以第一个参数中的相同字母开头的每个项目。

所以我有:

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

其中G是第一个字母F是列表

我不断收到: AttributeError的: '海峡' 对象有没有属性 'L'

有什么具体的,我做错了吗?

+0

? –

+3

您的错误与您的代码不符。 – vaultah

+0

我期望i.F [0]遍历列表中的每个项目并返回满足参数 – SystemofaCode

回答

2

首先看看行:

for i in F: 

在这里,你可以一次通过i访问F一个元素。

因此,您应该使用i[0](i的第一个数字)而不是i.F[0]

其次,

您返回list,不匹配的值。

如果你改正它,即使你有多个匹配,你仍然只有第一场比赛。

这是因为,您在第一场比赛后立即返回。

您可以通过列表理解实现您的预​​期输出。

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

首先,您可能会更好地为变量命名。而不是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实际上有一种叫做list comprehensions它可以更容易地做这种事情。

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

我推荐阅读上面链接的列表推导。

0

既然你已经说了for i in F:你可以说if i[0] == G。就是说,访问我的第零个元素。

我相信你在上面的例子中试图返回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) 
1

在循环中,你可以说:

if i.startswith(G): 
    yield i 

你可以调用这个函数为:你有什么期望`i.F [0]`做

matches = list(match_first_letter(F, G))