基本上我必须创建一个输入2个参数的函数: 第一个是一封信(即' i') 第二个是一个清单(即['树','铁','汽车','印度'])
我的函数应该返回列表中第一个参数中以相同字母开头的每个项目。
所以我有:
<dom-module id="my-component">
<template>
<h1>Hello</h1>
<h2>{{items.length}}</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<tr repeat="{{ item in items }}">
<td>{{ item.name }}</td>
<td>{{ item.status }}</td>
</tr>
</tbody>
</table>
<br />
<button on-click="testClick">Test</button>
</template>
<script>
// element registration
Polymer({
is: "my-component",
properties: {
items: {
type: Array,
value: function() {
return [
new Item({ name:'Tennis Balls', status:'Ordered' }),
new Item({ name:'T-Shirts', status: 'Ordered' })
];
}
}
},
testClick: function() {
for (var i=0; i<items.length; i++) {
if (items.name === 'Tennis Balls') {
items[i].status = 'Shipped';
break;
}
}
}
});
</script>
</dom-module>
其中G是第一个字母,F是列表
我一直在: AttributeError:&#39; str&#39;对象没有属性&#39; L&#39;
我有什么具体的错误吗?
答案 0 :(得分:2)
首先看看这一行:
for i in F:
在这里,您可以一次访问F
到i
的一个元素。
所以,你应该使用i[0]
(i的第一个数字)而不是i.F[0]
。
其次,
您将返回list
,而不是匹配的值。
如果你纠正了它,即使你有多场比赛,你仍然只有第一场比赛。
那是因为,你是在第一场比赛后立即回来的。
您可以通过列表理解来实现预期的输出。
def match_first_letter(G, F):
return [i for i in F if i[0]==G]
答案 1 :(得分:1)
在循环内你可以说:
if i.startswith(G):
yield i
您可以将此功能称为:
matches = list(match_first_letter(F, G))
答案 2 :(得分:0)
首先,你可能会更明智地命名变量。 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实际上有一些名为list comprehensions的东西可以更容易地做到这一点。
def match_first_letter(letter, strings):
return [string_x for string_x in strings if string_x[0] == letter]
我建议您阅读以上链接中的列表推导。
答案 3 :(得分:0)
由于您已经说for i in F:
,您可以说if i[0] == G
。也就是说,访问i的第0个元素。
我相信您在上面的示例中尝试返回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)