欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

过滤、修改和替换列表数据

程序员文章站 2023-01-12 13:50:27
使用推导式过滤、修改和替换列表数据,使用filter()函数过滤数据,使用itertools.compress()过滤数据 ......

##  列表数据的过滤、修改、和替换

 1 # 使用推导式过滤、修改和替换数据
 2 nums = [10,4,33,-54,54,-6,34,-5,23,56,-87,43,-4,3]
 3 new_nums = [i for i in nums if i >= 0] # 过滤掉小于0的元素
 4 print(new_nums)
 5 # [10, 4, 33, 54, 34, 23, 56, 43, 3]
 6 
 7 new_nums = [abs(i) for i in nums]  # 将所有元素值修改为其绝对值
 8 print(new_nums)
 9 # [10, 4, 33, 54, 54, 6, 34, 5, 23, 56, 87, 43, 4, 3]
10 
11 new_nums = [i if i >= 0 else 0 for i in nums] # 将小于0的元素替换为0
12 print(new_nums)
13 # [10, 4, 33, 0, 54, 0, 34, 0, 23, 56, 0, 43, 0, 3]
14 
15 # 使用生成器表达式操作列表以节省内存
16 new_nums = (i for i in nums if i >= 0)
17 print(new_nums)
18 # <generator object <genexpr> at 0x7f4bebb01048>
19 
20 # 对于过滤条件比较复杂的列表,使用filter()函数进行过滤
21 
22 def is_int(item):
23     try:
24         int(item)
25         return True
26     except ValueError:
27         return False
28 
29 items = ['a', '1', '-28', '2.42', 'b', '-8.34']
30 print(list(filter(is_int, items)))
31 # ['1', '-28']
32 
33 # itertools.compress()过滤数据
34 from itertools import compress
35 
36 
37 nums = [10,4,33,-54,54,-6,34,-5,23,56,-87,43,-4,3]
38 is_greater_than_0 = [i > 0 for i in nums] # 创建布尔值序列
39 print(is_greater_than_0)
40 # [True, True, True, False, True, False, True, False, True, True, False, True, False, True]
41 
42 print(list(compress(nums, is_greater_than_0))) # 为True的被保留,为False的被过滤
43 # [10, 4, 33, 54, 34, 23, 56, 43, 3]

 

 

参考资料:
  Python Cookbook, 3rd edition, by David Beazley and Brian K. Jones (O’Reilly).