如何修复“ .pop()函数超出范围”

时间:2019-09-05 02:12:35

标签: python list

嘿堆栈溢出社区,

我正在尝试做一个简单的事情-从给定列表中弹出每个第i个元素,并删除每个元素中的任何前导/后缀空格。

问题是-每当我经过list.pop(i)循环时,out of range函数都会返回for i in range (0, len(games_list))错误。

我能够使用list.pop(0)而不是list.pop(i)来解决这个问题。请帮助我理解原因。

实际代码如下。

我已经看过range.pop()函数指南,但是并没有给我答案。

代码

games_list = [
' The Movie: The Game',
' The Legend of Corgi',
' Dinosaur Diner']


for i in range(0, len(games_list)):
    temp = games_list.pop(0) 
    temp = temp.strip()
    games_list.append(temp)

print (games_list)

我希望输出如下:

['The Movie: The Game', 'The Legend of Corgi', 'Dinosaur Diner']

2 个答案:

答案 0 :(得分:1)

由于game_list.pop(i)还会删除i处的元素,因此您正在迭代初始长度时缩短了列表。

通常,最好通过foreach遍历列表:

striped_games_list = []
for title in games_list:
    striped_games_list.append(title.strip())
game_titles = striped_games_list  # A better design would be to exclude this and simply use striped_game_list going forward

但是,在您的情况下,我建议您进行列表理解:

game_titles = [title.strip() for title in game_titles]

答案 1 :(得分:-1)

您的代码非Pythonic。您可以直接迭代列表中的元素而不是它们的索引,然后将剥离的元素收集到另一个干净的列表中,而不必弹出并追加到同一列表中。会回答您的问题吗?

<ul class="slideList">

  <li data-transition="fade">
    <div class="service-highlight">
      <p class="services-box">SOME SERVICES:</p>
      <p class="services-detail">Service headline detail</p>
      
      <div class="hide-description">
    Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quisquam animi accusamus officia accusantium quaerat distinctio, omnis neque adipisci! Rerum nemo vitae necessitatibus autem fugit ipsam in nam asperiores. Eius, vitae.
    </div>
    <div class="clearFloat"></div>
    </div>
  </li>
        
<ul>