Python3-过滤掉随机列表中的负数

本文介绍两种Python实现方式来过滤随机生成列表中的负数:一种是利用列表推导式,另一种是采用filter函数结合lambda表达式。通过这两种方法对比,展示了不同Python特性的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python3-过滤掉随机列表中的负数

图片在上 代码段在下 

# 过滤掉随机列表中的负数
# 示例[3, 9,-1, 10, 20,-2...]

import time
from random import randint

def way_1(arr):
    # 方法1 使用列表表达式 常用方法
    start_time = time.time()
    time.sleep(0.1) # 时间太短会显示 0.0 所以有个0.1延时
    arr_positive_num = [i for i in arr if i >= 0]

    end_time = time.time()
    print('方法1',arr,'筛选后:',arr_positive_num)
    print('耗时:',end_time - start_time,'\n') # \n 换行)

def way_2(arr):
    '''函数说明
    @ 方法2 使用filter 作为学习了解 平时工作中并不常见'
    @ filter()函数用于过滤序列,过滤掉不符合条件的元素,返回符合条件的元素组成新列表 经常会与 list lambda 结合使用
    @ 使用 lambda 创建一个小的匿名函数
    '''

    start_time = time.time()
    time.sleep(0.1) # 时间太短会显示 0.0 所以有个0.1延时
    arr_positive_num = list(filter(lambda x: x >= 0,arr))

    end_time = time.time()
    print('方法1',arr,'筛选后:',arr_positive_num)
    print('耗时:',end_time - start_time,'\n') # \n 换行)

if __name__ == '__main__':
    print('main')
    # 创建随机列表 randint()方法返回作为两个参数提供的两个较低和较高限制(包括两个限制)之间的随机整数值
    arr = [randint(-100,100) for i in range(10)]
    way_1(arr)
    way_2(arr)

'''Python
拓展文档

# >>>>>>>>>>>>>>>>>>>>>>>>>>>>
函数 filter(function,iterable)
    @ function -- 判断函数
    @ iterable -- 可迭代对象

# >>>>>>>>>>>>>>>>>>>>>>>>>>>>
# 列表表达式 等同于下面的代码
arr = [randint(-100,100) for i in range(10)]

# 常规写法 结果同上述列表表达式
arr = []
for i in range(10):
    arr.append(randint(-100,100))

# >>>>>>>>>>>>>>>>>>>>>>>>>>>>    
# 列表表达式 等同于下面的代码
arr_positive_num = [i for i in arr if i >= 0] # 列表表达式 等同于下面的代码

# 常规写法 结果同上述列表表达式
arr_positive_num = []
for i in arr:
    if i >= 0:
        arr_positive_num.append(i)
'''

<think>好的,我现在需要帮助用户了解Python3中数组的使用方法,特别是关于列表(list)数据结构的操作。首先,我需要回忆Python中的列表基本操作,比如创建、访问元素、添加、除、切片等。根据用户提供的引用内容,用户提到的数组在Python中通常用列表来实现,特别是动态数组的特性。引用[2]提到列表的内部实现是动态数组,所以需要强调这一点。 接下来,我要确保回答结构清晰,分步骤说明。可能需要分成几个部分,比如创建数组、基本操作、常用方法、性能优化等。同时,用户要求生成相关问题,我需要考虑用户可能感兴趣的扩展内容,比如列表与元组的区别、性能比较、内存管理等。 需要注意用户提到的系统级指令,比如数学表达式要用$...$格式,但在这个问题中可能用不上,不过如果有涉及算法复杂度的地方,可能需要使用,比如O(n)的时间复杂度。另外,引用标识要自然地添加在引用的段落末尾,比如引用[^1]和[^2]。 需要检查是否有LaTeX语法错误,虽然这个问题可能更多涉及代码示例。确保代码部分正确使用Python语法,比如列表推导式、方法调用等。例如,用户提供的示例代码中有快速排序的实现,可能需要类似的代码示例来展示列表操作。 然后,考虑用户可能的疑问点,比如动态数组的扩容机制,列表的深浅拷贝,或者与其他数据结构(如NumPy数组)的区别。但根据引用内容,用户主要关注的是基础操作,所以可能需要先覆盖基础,再适当扩展。 在组织内容时,先介绍列表作为动态数组的基本概念,然后逐步展开操作,比如添加元素(append, extend, insert)、除元素(remove, pop, del)、切片、遍历等。同时,结合引用[2]提到的性能比较,可以简单提到列表操作的时间复杂度,比如append的平均O(1)复杂度,pop(0)的O(n)复杂度等。 最后,生成的相关问题需要围绕列表的使用、优化、比较和应用场景,例如如何高效合并列表列表与元组的区别,处理大型列表的内存优化方法等。需要确保问题能够引导用户进一步探索相关知识。 总结回答的结构: 1. 列表作为动态数组的简介 2. 基本操作(创建、访问、修改) 3. 常用方法(添加、除、查找、排序等) 4. 高级操作(切片、推导式、嵌套列表) 5. 性能注意事项 6. 相关问题 需要确保每个部分都有代码示例,并正确引用提供的参考资料,特别是在提到动态数组内部实现和性能优化时引用[^2],在提到保存数组时引用。</think>### Python3列表(动态数组)使用方法详解 Python中的**列表(list)** 是最常用的数据结构之一,其内部实现为**动态数组**,支持高效的元素增随机访问。以下是详细操作指南: --- #### 一、创建与初始化 ```python # 创建空列表 arr1 = [] arr2 = list() # 初始化含元素的列表 numbers = [1, 2, 3, 4] fruits = ["apple", "banana", "orange"] # 列表推导式生成 squares = [x**2 for x in range(10)] # [0,1,4,9,...,81] ``` --- #### 二、基础操作 1. **访问元素** ```python print(numbers[0]) # 输出: 1(索引从0开始) print(fruits[-1]) # 输出: orange(负数索引表示倒数) ``` 2. **修改元素** ```python fruits[1] = "grape" # 修改第二个元素 # 结果: ["apple", "grape", "orange"] ``` --- #### 三、常用方法 1. **添加元素** ```python fruits.append("peach") # 末尾添加单个元素 → ["apple", "grape", "orange", "peach"] fruits.insert(1, "mango") # 在索引1处插入 → ["apple", "mango", "grape", ...] fruits.extend(["kiwi", "pear"]) # 合并列表 → 末尾添加多个元素 ``` 2. **除元素** ```python fruits.remove("grape") # 除首个匹配元素 popped = fruits.pop(2) # 除并返回索引2的元素(默认除末尾) del fruits[0:2] # 除切片范围内的元素 ``` 3. **查找与统计** ```python index = fruits.index("orange") # 返回元素首次出现的索引 count = fruits.count("apple") # 统计出现次数 ``` 4. **排序与反转** ```python numbers.sort() # 原地升序排序 numbers.sort(reverse=True) # 降序排序 numbers.reverse() # 反转列表顺序 ``` --- #### 四、高级操作 1. **切片操作** ```python sub = numbers[1:3] # 获取索引1到2的元素(左闭右开) copy = numbers[:] # 复制整个列表 reverse_copy = numbers[::-1] # 反转复制 ``` 2. **列表推导式** ```python even_numbers = [x for x in numbers if x % 2 == 0] # 过滤偶数 matrix = [[i*j for j in range(3)] for i in range(3)] # 生成嵌套列表(矩阵) ``` --- #### 五、性能注意事项 - **追加元素**:`append()` 平均时间复杂度为 $O(1)$(动态数组自动扩容) - **插入/除开头元素**:`insert(0, x)` 或 `pop(0)` 需要 $O(n)$ 时间 - **查找元素是否存在**:`x in list` 需要 $O(n)$ 时间,建议改用集合(set)优化查询 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值