金天牛

导航

python列表数据处理之列表去重和循环删除

一、列表去重

比较简单的方法就是用集合set的属性:集合中不能出现重复的元素

例如: a = [1,2,3,4,5,4,3],例如 a1 =list(set(a)) ,则 a1 =  [1,2,3,4,5]

如果同时还有个 :b = ['a','b','c','d','e','f','g']

和 a 一一对应,如果需要把a去重后,还能和b一一对应,可以把b和a对应的元素存入一个列表,然后总体再做一个列表,用一个函数实现如下:

 1 def deduplication_list(list1, list2):
 2     # 传入2个长度相同的列表,第一个列表有重复,作去重处理,第2个列表一一对应,然后对应第一个列表去重后的数据,合并相同的到一个列表中,作为元素存于第2个列表
 3     list_str = []
 4     list_new = list(set(list1))
 5     # print(list_new)
 6     for i in range(len(list_new)):
 7         list_str.append([])
 8         for j in range(len(list1)):
 9             if list_new[i] == list1[j]:
10                 list_str[i].append(list2[j])
11     return list_new, list_str
12 a = [1,2,3,4,5,4,3]
13 b = ['a','b','c','d','e','f','g']
14 a1,b1 = deduplication_list(a,b)
15 print(f"a1 {a1},b1 {b1}")

则显示结果:a1 [1, 2, 3, 4, 5],b1 [['a'], ['b'], ['c', 'g'], ['d', 'f'], ['e']]

二、列表循环删除。

列表循环删除是比较麻烦的,因为删除一个元素后,整个列表改变了,再次删除就不是原来的样子了。

尤其是有2个一一对应的列表,删除一个列表中不合要求的元素,需要,第2个列表也需要对应删除时,需要谨慎处理,此处推荐2个方法。

1.倒序删除

 1 a001 = [1,2,3,4,5,6,7,8,9,10,11,12,13,14]
 2 a002 = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n']
 3 # 删除a001中的元素:符合除5余数为0的条件
 4 for i in range(len(a001))[::-1]:   #倒序赋值序号
 5     print(i)
 6     if a001[i] % 5 == 0:         #取序号对应的元素
 7         a001.pop(i)
 8         a002.pop(i)
 9 print(a001)
10 print(a002)

则结果为:

[1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14]
['a', 'b', 'c', 'd', 'f', 'g', 'h', 'i', 'k', 'l', 'm', 'n']

2.新增符合要求的元素到一个新列表里,不改变原有列表。 此方法更为推荐。

 1 a001 = [1,2,3,4,5,6,7,8,9,10,11,12,13,14]
 2 a002 = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n']
 3 b001 = []
 4 b002 = []
 5 for i in range(len(a001)):   
 6     print(i)
 7     if a001[i] % 5 != 0:         #取序号对应的元素
 8         b001.append(a001[i])     #元素插入新列表
 9         b002.append(a002[i])
10 print(b001)
11 print(b002)

结果是一样的:

[1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14]
['a', 'b', 'c', 'd', 'f', 'g', 'h', 'i', 'k', 'l', 'm', 'n']

 

posted on 2023-07-17 13:50  金天牛  阅读(335)  评论(0)    收藏  举报