【葡京娱乐平台】遍历删除元素,删除数据的正确方法

在遍历list的时候,删除符合条件的多少,然则总是报那么些,代码如下:

干活中,接口再次来到的时候,重回以下数据结构:

Python的list循环遍历中,删除数据的不利方法,pythonlist

初学Python,遇到过这么的标题,在遍历list的时候,删除符合条件的数量,不过总是报这几个,代码如下:

num_list = [1, 2, 3, 4, 5]
print(num_list)

for i in range(len(num_list)):
    if num_list[i] == 2:
        num_list.pop(i)
    else:
        print(num_list[i])

print(num_list)

会报极度:IndexError: list index out of range

由来是在剔除list中的成分后,list的实际上尺寸变小了,可是循环次数未有滑坡,照旧依据原先list的长度举办遍历,所以会招致索引溢出。

于是本人修改了代码如下:

num_list = [1, 2, 3, 4, 5]
print(num_list)

for i in range(len(num_list)):
    if i >= len(num_list):
        break

    if num_list[i] == 2:
        num_list.pop(i)
    else:
        print(num_list[i])

print(num_list)

那回不会报万分了,不过打字与印刷结果如下:

[1, 2, 3, 4, 5]
1
4
5
[1, 3, 4, 5]

[Finished in 0.441s]

固然如此最终,list中的成分[2]【葡京娱乐平台】遍历删除元素,删除数据的正确方法。的确被剔除掉了,不过,在循环中的打字与印刷结果不对,少打字与印刷了[3]。

钻探了下,知道了原因,当符合条件,删除成分[2]今后,前边的成分全体往前移,于是[3,
4,
5]向前挪动,那么成分[3]的目录,就改为了事先[2]的索引(现在[3]的下标索引变为壹了),后边的要素由此及彼。但是,下二回for循环的时候,是从下标索引二发轫的,于是,收取了成分[4],就把[3]漏掉了。

把代码修改成如下,结果1律,丝毫不曾改变:

num_list = [1, 2, 3, 4, 5]
print(num_list)

for item in num_list:
    if item == 2:
        num_list.remove(item)
    else:
        print(item)

print(num_list)

既是知道了难点的根本原因所在,想要找到准确的法子,也并轻便,于是小编写了如下的代码:

num_list = [1, 2, 3, 4, 5]
print(num_list)

i = 0
while i < len(num_list):
    if num_list[i] == 2:
        num_list.pop(i)
        i -= 1
    else:
        print(num_list[i])

    i += 1

print(num_list)

实践结果,完全准确:

[1, 2, 3, 4, 5]
1
3
4
5
[1, 3, 4, 5]

[Finished in 0.536s]

本人的做法是,既然用for循环不行,那就换个思路,用while循环来消除。每一回while循环的时候,都会去检查list的长度(i
<
len(num_list)),那样,就制止了索引溢出,然后,在符合条件,删除成分[2]从此现在,手动把当下下标索引-1,以使下三遍巡回的时候,通过-1后的下标索引抽取来的成分是[3],而不是略过[3]。

理当如此,那还不是最优解,所以,笔者搜寻到了通用的缓慢解决方案:一、倒序循环遍历;二、遍历拷贝的list,操作原始的list。

1、倒序循环:

num_list = [1, 2, 3, 4, 5]
print(num_list)

for i in range(len(num_list)-1, -1, -1):
    if num_list[i] == 2:
        num_list.pop(i)
    else:
        print(num_list[i])

print(num_list)

进行结果完全正确。那么,为何正序循环时删除就有标题,而倒序循环时去除就ok?额。。。。。。言语难表,依旧画个丑图出来呢。

壹)正序循环时删除:

葡京娱乐平台 1

删去成分[2]尔后,下三遍巡回的下标索引为二,但此刻,里面存放的是[4],于是就把[3]给漏了。

二)倒序循环时删除

葡京娱乐平台 2

删除成分[2]后,[3, 4,
5]往前挤,不过没什么,因为下二回巡回的下标索引为0,里面存放的是[1],所以辛亏我们所企望的不错的成分值。

二、遍历拷贝的list,操作原始的list

num_list = [1, 2, 3, 4, 5]
print(num_list)

for item in num_list[:]:
    if item == 2:
        num_list.remove(item)
    else:
        print(item)

print(num_list)

原始的list是num_list,那么实际上,num_list[:]是对原来的num_list的2个正片,是贰个新的list,所以,大家遍历新的list,而除去原始的list中的成分,则既不会挑起索引溢出,最终又能够获得想要的尾声结出。此方法的欠缺或许是,对于过大的list,拷贝后也许很占内部存款和储蓄器。那么对于这种景色,能够用倒序遍历的章程来兑现。

 

初学Python,蒙受过如此的主题素材,在遍历list的时候,删除符合条件的数码,不过总是报…

python 遍历列表 list,python列表list

 names=[‘a’,’b’,[‘aha’,[[‘lucy’,’lily’]]]

遍历那么些列表

def print_list(this_list);

  for name in this_list:

    if isinstance(name ,list):

      print_list(name )

    else :

      print(name)`

>>> print_list(names)

即可

遍历列表 list,python列表list
names=[‘a’,’b’,[‘aha’,[[‘lucy’,’lily’]]] 遍历那一个列表 def
print_list(this_list); for name inthis_list: if
isinstance(name,list): p…

num_list = [1, 2, 3, 4, 5]
print(num_list)

for i in range(len(num_list)):
 if num_list[i] == 2:
  num_list.pop(i)
 else:
  print(num_list[i])

print(num_list)
data = [
    {
        'dtu_type_id': '#01',
        'dtu_type': '第一类',
        'info': [
            {
                'dtu_type_id': ‘1’,
                'dtu_type': 类型1,
                'info': []
            },
            {
                'dtu_type_id': ‘2’,
                'dtu_type': 类型2,
                'info': []
            }
        ]
    },
    {
        'dtu_type_id': '#02',
        'dtu_type': '第二类',
        'info': [
            {
                'dtu_type_id': ‘5’,
                'dtu_type': 种类5,
                'info': []
            },
        ]
    },
    {
        'dtu_type_id': '#03',
        'dtu_type': '第三类',
        'info': [
            {
                'dtu_type_id': ‘6’,
                'dtu_type': 种类6,
                'info': []
            },
        ]
    },
]

相关文章