python列表list增加元素的4个方法:直接+,append()和.extend() .insert()的应用及分离列表里奇数偶数的方法

不念不忘少年蓝@ 2023-07-06 09:49 15阅读 0赞

python列表list增加元素的4个方法:直接+,append()和.extend() .insert()的应用体验

#

先看一个应用例子:python分离列表中的偶数和奇数.

  1. a = [1, 2, 3, 4, 5, 6, 7, 8, 8]
  2. odd = list()
  3. even = list()
  4. n = 0
  5. while n <= (len(a) - 1): #注意:这里边界限值,勿忘减一。索引号的最大值是列表的长度(元素个数)减1,这一点容易忽略,出错.
  6. if a[n] % 2 == 0:
  7. even.append(a[n]) #这是把a列表里的第n位元素,添加到even列表里.
  8. else:
  9. odd.append(a[n])
  10. n += 1
  11. print('奇数是', odd)
  12. print('偶数是', even)
  13. #------------------------------------------
  14. print('上面是用append,下面将用extend')
  15. a = [1, 2, 3, 4, 5, 6, 7, 8, 8]
  16. odd = list()
  17. even = list()
  18. n = 0
  19. while n <= (len(a) - 1):
  20. if a[n] % 2 == 0:
  21. even.extend(a[n:n + 1]) #注意:这里用.extend,如果还象append那样的形式就不行了,因为根据提示,切片(slice)可以用. 所以,要是只取一位元素添加的话,可以利用列表[]左闭右开的特点,假借切片的形式(a[n:n+1]),这其实还是只取第n位元素.
  22. else:
  23. odd.extend(a[n:n + 1])
  24. n+=1
  25. print('奇数是', odd)
  26. print('偶数是', even)

运行结果如下:

  1. 奇数是 [1, 3, 5, 7]
  2. 偶数是 [2, 4, 6, 8, 8]
  3. 上面是用append,下面将用extend
  4. 奇数是 [1, 3, 5, 7]
  5. 偶数是 [2, 4, 6, 8, 8]
  6. [Finished in 0.1s]

上面的办法,源于初学自然思维,后来看到老师答案,觉得比较妙.

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2FobWN3dA_size_16_color_FFFFFF_t_70

  1. number = [1,2,3,4,5,6,7,8,8]
  2. even=[] #[ ]与list()等效
  3. odd =[] #odd代表奇数
  4. while len(number)>0: #当列表长度>0即列表不为空的时候
  5. numbers= number.pop( ) #从列表中取出一个元素赋值给numbers,.pop()默认从尾部取,也可指定索引位取元素,如.pop(2)
  6. if numbers%2==0: #如果numbers对2取余(%)值为0,即能被2整除,
  7. even.append(numbers) #把numbers用.append()添加到even列表中,even表偶数
  8. #even.insert(0,numbers)#如用insert(),功能上和一样,但指定把number插入到0位,即放在最前,以便打印even2能把大数放在后面.
  9. else: #但是上句是想当然地认为列表里的元素是大数在后面的情况.
  10. odd.append(numbers)
  11. print ('奇数是',sorted(odd)) #print()里的字符与函数用逗号隔开,否则报错; sotrted()是函数.注意使用方法格式.
  12. print ('偶数是',sorted(even)) #如用sorted(odd,reverse=True) ,则表示降序;.sort是方法.

用.pop()方法,不用为控制循环再用 n+=1,减少了计算量,又节约内存空间占用,效率高

运行结果:

  1. 奇数是 [1, 3, 5, 7]
  2. 偶数是 [2, 4, 6, 8, 8]
  3. [Finished in 0.1s]

壹:

增加一个元素

把列表里某一位元素加到a,以下三方法所得的结果没什么差别.都是散兵,都好混入.

一.a=a+b[n,n+1]

a=a+b 有返回值.

二.a.extend(b[n,n+1])

.extend() 不可用a=a.extend()这种方式,因为不产生新对象,只是对原对象本身进行动作.这样写,最后a是一个空值类型.

上面两种方式可以实现最终相同的效果,但用相加的方式因为产生新对象(别人说的)有返回值可能会加大内存开销,但写代码时简便了一些。

三.a.append(b[n])

.append()也不可用a=a.append()这种方式.

注意:a.append(b[n])只有在添加某1个元素的时候,会有相同效果,多于一个,效果都不一样了。

四. a.insert(n,b[x])

.insert(n是要插入点的索引位号,b列表指定的元素),注意:插入一个元素.如果是带多个元素进去,则进去后会被引号包起来.

  1. print('下面是在a中增加b列表中的一个元素')
  2. print('一.下面先是用+ 来做追加')
  3. a=[2,3]
  4. b=[2,3]
  5. print('a',a)
  6. print('b',b)
  7. a=a+b[0:1]
  8. print('a=a+b[0:1]的结果',a)
  9. #--------------------------
  10. print('*'*30)
  11. print('二.下面追加是用.append()')
  12. a=[2,3]
  13. b=[2,3]
  14. print('a',a)
  15. print('b',b)
  16. a.append(b[0])
  17. print('a.append(b[0])的结果',a)
  18. #--------------------------
  19. print('*'*30)
  20. print('三.下面追加是用.extend()')
  21. a=[2,3]
  22. b=[2,3]
  23. print('a',a)
  24. print('b',b)
  25. a.extend(b[0:1])
  26. print('a.extend(b[0])的结果',a)
  27. #--------------------------
  28. print('*'*30)
  29. print('四.下面混入是用.insert(1,b[n]')
  30. a=[2,3]
  31. b=[2,3]
  32. print('a',a)
  33. print('b',b)
  34. a.insert(1,b[1]) #把b列表中的第1位的3,加到a的1位上
  35. print('a.extend(b[0])的结果',a)
  36. print('*'*30)
  37. print('''前面4种方法,加入单独一个元素(从a到b里),效果都是相同的,外观上没有差别,
  38. 就是说进入的元素没有被引号包起来成为另类''')

运行效果如下:

  1. 下面是在a中增加b列表中的一个元素
  2. 一.下面先是用+ 来做追加
  3. a [2, 3]
  4. b [2, 3]
  5. a=a+b[0:1]的结果 [2, 3, 2]
  6. ******************************
  7. 二.下面追加是用.append()
  8. a [2, 3]
  9. b [2, 3]
  10. a.append(b[0])的结果 [2, 3, 2]
  11. ******************************
  12. 三.下面追加是用.extend()
  13. a [2, 3]
  14. b [2, 3]
  15. a.extend(b[0])的结果 [2, 3, 2]
  16. ******************************
  17. 四.下面混入是用.insert(1,b[n]
  18. a [2, 3]
  19. b [2, 3]
  20. a.extend(b[0])的结果 [2, 3, 3]
  21. ******************************
  22. 前面4种方法,加入单独一个元素(从ab里),效果都是相同的,外观上没有差别,
  23. 就是说进入的元素没有被引号包起来成为另类
  24. [Finished in 0.1s]

贰:

增加多个元素

此时差别明显,形式上,b列表中要选出的元素,都是用切片(即带有: )的方式表达,比如b[x:y],就是把b中, x位上起,到y-1位止的所有元素. 因为列表切片的[x :y ],含义是左闭右开,意思是包括左边x位置上的元素,但不包括y位上的元素,而是y位挨前边那一位即y-1位上的元素.

一.这个时候,插进去元素, extend()方式与列表直接+ 的方式,这两个相类似,都是全身心混入,不带自身特色.不另类,都没有被引号包裹.

  1. #---下面是添加多个元素例子------------------
  2. print('*'*60)
  3. print('列表中添加另一列表多个元素的例子:')
  4. print('1.用extend()')
  5. a=[1,2,3]
  6. b=[4,5,6]
  7. print('a',a)
  8. print('b',b)
  9. a.extend(b[1:3]) #把b中索引1位上的5,3-1位上的6,两个元素混入到a里.注意:索引位号都是从0开始.
  10. print('a.extend(b[1:3])的结果',a)
  11. #--------------------------
  12. print('-'*40)
  13. print('2.直接用+ ')
  14. a=[1,2,3]
  15. b=[4,5,6]
  16. print('a',a)
  17. print('b',b)
  18. a=a+b[1:3] #把b中索引1位上的5,3-1位上的6,两个元素加到a里.注意:索引位号都是从0开始.
  19. print('a=a+b[1:3]的结果',a)
  20. #--------------------------

下面是运行结果:

  1. 列表中添加另一列表多个元素的例子:
  2. 1.extend()
  3. a [1, 2, 3]
  4. b [4, 5, 6]
  5. a.extend(b[1:3])的结果 [1, 2, 3, 5, 6]
  6. ----------------------------------------
  7. 2.直接用+
  8. a [1, 2, 3]
  9. b [4, 5, 6]
  10. a=a+b[1:3]的结果 [1, 2, 3, 5, 6]
  11. [Finished in 0.2s]

由上面可以看出,.extend()方法与直接+的方法,输出值是相同的.

二.用.append(b[x:y])与.insert(n,b[x:y])

  1. print('1.用.append(b[x:y])')
  2. a=[1,2,3]
  3. b=[4,5,6]
  4. print('a',a)
  5. print('b',b)
  6. a.append(b[1:3]) #把b中索引1位上的5,3-1位上的6,两个元素混入到a里.注意:索引位号都是从0开始.
  7. print('a.append(b[1:3])的结果',a)
  8. #--------------------------------
  9. print('2.用.insert(n,b[x:y]')
  10. a=[1,2,3]
  11. b=[4,5,6]
  12. print('a',a)
  13. print('b',b)
  14. a.insert(3,b[1:3]) #把b中索引1位上的5,3-1位上的6,两个元素混入到a的3位上(即追加到最后一位开始),.注意:索引位号都是从0开始.
  15. print('a.insert(3,b[1:3])的结果',a)
  16. #--------------------------------

下面是运行结果:

  1. 1.用.append(b[x:y])
  2. a [1, 2, 3]
  3. b [4, 5, 6]
  4. a.append(b[1:3])的结果 [1, 2, 3, [5, 6]]
  5. ----------------------------------------
  6. 2.用.insert(n,b[x:y]
  7. a [1, 2, 3]
  8. b [4, 5, 6]
  9. a.insert(3,b[1:3])的结果 [1, 2, 3, [5, 6]]
  10. [Finished in 0.2s]

结果是添加的元素5 6都被用中括号包了起来[5,6],

由此可见.append()与.insert()的结果是相同的.

由以上也可以看出,有文章里说这几个有的不能用于多个元素的那个说法是不确切的.

#

发表评论

表情:
评论列表 (有 0 条评论,15人围观)

还没有评论,来说两句吧...

相关阅读