困惑的IndexError:列表索引超出范围

时间:2018-12-22 07:08:33

标签: python python-3.x

我是编码的新手,而python是我的第一语言。我陷入了自己的锻炼代码中。

代码段:

a = []
b = []

while len(a) < 11:

    a.append(int(input("enter a number:")))
    if len(a) == 10:
        break

    print ('Original keyed in numbers are:',a)

for element in a:

    if a[element] > 5:
        continue
    b.append(a[element])

print('These are numbers you entered that are less than or equal to 5:',b)

在执行上述代码片段时,我遇到了IndexError:列表索引超出范围错误。

我的代码中有错误的示例结果是:

Error Output

enter image description here

3 个答案:

答案 0 :(得分:0)

循环for element in a遍历列表a的值,而不遍历它们的索引。在每次迭代中,element是下一个列表项的值。正确的循环如下所示:

for element in a:    
    if element > 5:
         continue
    b.append(element)

一种更好的方法是使用列表理解:

b = [element for element in a if element <= 5]

答案 1 :(得分:0)

Python for循环是每个循环的一个,因此您直接迭代列表中的值,并且当该值小于或等于5时,您需要添加到另一个列表b

很少更正

if len(a) == 10:
    break

不需要在代码中进行上述检查,因为只要条件为while,并且True超过10,控制移出,就保证len(a)循环有效自动循环。

此外,如果您撤销了continue条件检查,则不需要if

最后,这就是您想要的:

a = []
b = []

while len(a) < 11:
    a.append(int(input("enter a number:")))

print ('Original keyed in numbers are:',a)

for element in a:
    if element <= 5:
        b.append(element)

print('These are numbers you entered that are less than or equal to 5:',b)

答案 2 :(得分:0)

如果您愿意使用其索引访问列表元素,则应尝试这样。

<script id="handlebars-gallery" type="text/x-handlebars-template">

{{#each img}}

<div class="small-12 medium-4 large-2 cell">

 <div class="grid-x grid-padding-x">

     <div class="cell item">

                <a href="">
                    <div class="img_back blog_one" style="background- 
                       image:url('{{this}}')">
                        <div class="title">

                        </div>
                    </div>
                </a>
            </div>
        </div>
    </div>
    {{/each}}

    </script>

 <script type="text/javascript">

   $('.owl-carousel').owlCarousel({
        loop: true,
        margin: 10,
        nav: true,
        responsive: {
        0: {
            items: 1
        },
        600: {
            items: 3
        },
        1000: {
            items: 5
        }
     }
   });

//get data from json and generate it by handlebars


   var template = $("#handlebars-gallery").html();
   var templateScript = Handlebars.compile(template);

  $.ajax({
    type: "GET",
    url: '../../content/Gallery-img/Gallery-img.json',
    success: function (data) {
        //debugger;
        console.log(data);
        //console.log(data.length);
        var context = data;
        var html = templateScript(context);
         $(html).prependTo(".blog_items");
        //$('.blog_items').append(html);

        debugger;
      },
    error: function (er) {
        debugger;
    }
    });
  </script>