Python ForLoop输入

时间:2015-10-19 17:00:34

标签: python python-3.x

基本上我必须创建一个输入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;

我有什么具体的错误吗?

4 个答案:

答案 0 :(得分:2)

首先看看这一行:

for i in F:

在这里,您可以一次访问Fi的一个元素。

所以,你应该使用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)

首先,你可能会更明智地命名变量。 GF怎么样,而不是letterstrings?你的代码是这样的:

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个元素。

我相信您在上面的示例中尝试返回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)