Python 목록 이해를 사용할 때 주의할 사항
Python教程栏目今天翻译介绍列表推导式使用的注意事项。
Python 列表推导式使用注意事项
Python 列表推导式并不是给初学者用的,因为它非常反直觉,甚至对于有其他编程语言背景的人也是如此。
我们接触到 List 的使用时,学习的内容都是零散的。所以我们缺少一个关于如何在各种各样的场景下使用 List 的知识体系。
本文提供了一些 List 的使用指南,尽可能涵盖各个方面。希望本文可以成为你的一站式实用手册。
使用建议
1.建议使用迭代的方式
使用 List 最基本的方式是以一个可迭代对象为基础,创建一个 List 对象,这个可迭代对象可以是任意可以迭代元素的Python对象。使用方法如下。
[expression for item in iterable]复制代码
下面这段代码展示了一个使用列表相关技术创建 List 对象的例子。在这个例子中,我们定义了一个 Integer 列表,并基于这个对象创建了保存每个数字的平方数和立方数的 List 对象。
>>> # 创建一个 Integer 列表>>> integers = [1, 2, 3, 4, 5, 6]>>> # 创建平方数和立方数列表>>> powers = [(x*x, pow(x, 3)) for x in integers]>>> print(powers) [(1, 1), (4, 8), (9, 27), (16, 64), (25, 125), (36, 216)]复制代码
上面的例子把 List 对象当作迭代器使用。我们应该知道,许多类型的对象也是可迭代的,比如 List、Set、Dictionary 和 String 等等。其他数据类型,像 range、map、filter,以及 pandas 包中的 Series、DataFrame,都是可迭代的。下面的代码演示了某些对象的使用方法。
>>> # 使用 range 对象>>> integer_range = range(5)>>> [x*x for x in integer_range] [0, 1, 4, 9, 16]>>> # 使用 Series 对象 >>> import pandas as pd>>> pd_series = pd.Series(range(5))>>> print(pd_series)0 01 12 23 34 4dtype: int64>>> [x*x for x in pd_series] [0, 1, 4, 9, 16]复制代码
2.如果只需用到其中的某些元素,应当使用条件判断语句
假设你需要将符合某种条件的元素归集起来,并创建一个 list。下面展示了相关的语法。
[expression for item in iterable if condition]复制代码
if
语句用来实现条件判断。下面的代码展示了这种用法的一个简单示例。
>>> # 同样创建一个 Integer 列表>>> integers = [1, 2, 3, 4, 5, 6]>>> # 筛选出偶数,创建一个这些偶数的平方数列表>>> squares_of_evens = [x*x for x in integers if x % 2 == 0]>>> print((squares_of_evens)) [4, 16, 36]复制代码
3.使用条件判断语句
List 对象中还可以使用 if-else 形式的条件判断,语法如下。
[expression0 if condition else expression1 for item in iterable]复制代码
这跟前面的那种用法有些类似,别把这两种用法混淆。在本例中,条件语句本身是一个整体。下面的代码提供了一个例子。
>>> # 创建一个 Integer 列表>>> integers = [1, 2, 3, 4, 5, 6]>>> # 遍历 integers 中的元素,如果是偶数,取平方数存入新的列表>>> # 如果是奇数,取立方数存入新的列表>>> custom_powers = [x*x if x % 2 == 0 else pow(x, 3) for x in integers]>>> print(custom_powers) [1, 4, 27, 16, 125, 36]复制代码
4.如果有嵌套结构,可以使用嵌套的循环
有可能可迭代对象中的元素自身也是可迭代的,尽管这种情况不太常见。如果你对嵌套的可迭代对象有兴趣,可以使用 for
来实现循环嵌套。语法如下。
[expression for item_outer in iterable for item_inner in item_outer] # 与下面的代码等同 for item_outer in iterable: for item_inner in item_outer: expression复制代码
上面的代码展示了使用for
实现嵌套循环的例子。
>>> # 创建一个包含元组的列表>>> prices = [('$5.99', '$4.99'), ('$3.5', '$4.5')]>>> # 获取元组中的每个价格,以此创建一个一维列表>>> prices_formatted = [float(x[1:]) for price_group in prices for x in price_group]>>> print(prices_formatted) [5.99, 4.99, 3.5, 4.5]复制代码
5.替换高阶函数
有的人比较习惯函数式编程,比如使用高阶函数也是这种习惯的表现之一。特别说明一下,高阶函数是那些需要使用输入或输出参数的函数。在 Python 中,常用的高阶函数有 map()
和 filter()
。
>>> # 创建一个 integer 类型的列表>>> integers = [1, 2, 3, 4, 5]>>> # 使用 map 创建平方数列表>>> squares_mapped = list(map(lambda x: x*x, integers))>>> squares_mapped [1, 4, 9, 16, 25]>>> # 使用列表推导式创建平方数列表>>> squares_listcomp = [x*x for x in integers]>>> squares_listcomp [1, 4, 9, 16, 25]>>> # 使用 filter 取得 integers 中的偶数列表>>> filtered_filter = list(filter(lambda x: x % 2 == 0, integers))>>> filtered_filter [2, 4]>>> # 使用列表推导式取得 integers 中的偶数列表>>> filterd_listcomp = [x for x in integers if x % 2 == 0]>>> filterd_listcomp [2, 4]复制代码
从上面的例子可以看出,使用 list 的某些特性比使用高阶函数更具有可读性,而且也能实现较复杂的嵌套结构。
使用禁忌
1.不要忘了定义构造函数
有人认为列表推导式很酷炫,是 Python 特有的功能,所以为了炫耀自己的 Python 水平,即使有更好替代方案也要使用它。
>>> # 使用 range 创建列表对象>>> numbers = [x for x in range(5)]>>> print(numbers) [0, 1, 2, 3, 4]>>> # 以一个字符串为基础,创建一个小写字母的字符列表>>> letters = [x.lower() for x in 'Smith']>>> print(letters) ['s', 'm', 'i', 't', 'h']复制代码
上述例子中,我们使用了 range 和 string,这两种数据结构都是可迭代的,list()
构造函数可以直接使用 iterable 创建一个 list 对象。下面的代码提供了更合理的解决方案。
>>> # 使用 range 创建列表对象>>> numbers = list(range(5))>>> print(numbers) [0, 1, 2, 3, 4]>>> # 以一个字符串为基础,创建一个小写字母的字符列表>>> letters = list('Smith'.lower())>>> print(letters) ['s', 'm', 'i', 't', 'h']复制代码
2.不要忘了生成器表达式
在 Python 中,生成器是一种特殊的可迭代对象,它会延迟加载元素,直到被请求才会加载。这在处理大量数据时会非常高效,它能提升存储效率。相比之下,list 对象为了方便计数和索引,一次性创建所有的元素。所以跟生成器相比,在元素个数相同时,list 需要占用更多内存。
我们可以定义一个生成器函数来创建生成器。我们也可以使用下面的语句来创建生成器,这是一种称为生成器表达式的方法。
(expression for item in iterable)复制代码
你可能会注意到,除了使用圆括号外,它的语法跟使用 list 的语句很相似。所以需要注意区分。
考虑下面这个例子。我们要计算前一百万个数字的平方和。如果使用 list 来实现,方法如下。
>>> # 创建列表对象 squares >>> squares = [x*x for x in range(10_000_000)]>>> # 计算它们的总和>>> sum(squares)333333283333335000000>>> squares.__sizeof__()81528032复制代码
如上所示,list 对象占据 81528032 字节。我们考虑使用 generator 进行相同的操作,代码如下。
>>> # 创建 generator 对象,保存每个数的平方数>>> squares_gen = (x*x for x in range(10_000_000))>>> # 计算它们的总和>>> sum(squares_gen)333333283333335000000>>> squares_gen.__sizeof__()96复制代码
跟使用 list 相比,使用 generator 内存开销小得多,只有 96 字节。原因很简单———— generator 不需要获取所有的元素。相反,它只需要获取各个元素在序列中的位置,创建下一个元素并呈现它,而且不必保存在内存中。
结论
本文中,我们整理了 list 应用的一些关键要领。这些该做的和不该做的都非常清晰明了。我估计你会在合适的场景中用到它。下面是本文内容的小结。
- 使用迭代的方式。 Python 中有许多类型的 iterable,你应当在掌握基础(list 和 tuple)的同时融会贯通。
- 使用条件判断语句。 如果你对在 iterable 中筛选某些元素感兴趣,可以多多研究条件判断。
- 使用条件判断表达式。 如果你需要有选择性地获取某些数据,可以使用条件判断表达式。
- 使用嵌套的循环。 如果你要处理嵌套的 iterable,可以使用嵌套的循环结构。
- 用 list 替代高阶函数 在很多情况下,可以用 list 替代高阶函数。
- 不要忘记 list 的构造函数 定义 list 的构造函数,可以使用 iterable 创建一个 list 对象。如果你直接使用 iterable,推荐用这个方法。
- 不要忘了生成器表达式 它的语法与 list 中的语法相似。在处理大量的对象时,这是一种节省内存开销的办法。list 和 generator 不同的是,为了日后的索引和访问, list 必须提前创建,如果元素个数很多,就会消耗很大的内存。
大量免费学习推荐,敬请访问python教程(视频)
위 내용은 Python 목록 이해를 사용할 때 주의할 사항의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP는 주로 절차 적 프로그래밍이지만 객체 지향 프로그래밍 (OOP)도 지원합니다. Python은 OOP, 기능 및 절차 프로그래밍을 포함한 다양한 패러다임을 지원합니다. PHP는 웹 개발에 적합하며 Python은 데이터 분석 및 기계 학습과 같은 다양한 응용 프로그램에 적합합니다.

PHP는 웹 개발 및 빠른 프로토 타이핑에 적합하며 Python은 데이터 과학 및 기계 학습에 적합합니다. 1.PHP는 간단한 구문과 함께 동적 웹 개발에 사용되며 빠른 개발에 적합합니다. 2. Python은 간결한 구문을 가지고 있으며 여러 분야에 적합하며 강력한 라이브러리 생태계가 있습니다.

Python은 부드러운 학습 곡선과 간결한 구문으로 초보자에게 더 적합합니다. JavaScript는 가파른 학습 곡선과 유연한 구문으로 프론트 엔드 개발에 적합합니다. 1. Python Syntax는 직관적이며 데이터 과학 및 백엔드 개발에 적합합니다. 2. JavaScript는 유연하며 프론트 엔드 및 서버 측 프로그래밍에서 널리 사용됩니다.

VS 코드는 파이썬을 작성하는 데 사용될 수 있으며 파이썬 애플리케이션을 개발하기에 이상적인 도구가되는 많은 기능을 제공합니다. 사용자는 다음을 수행 할 수 있습니다. Python 확장 기능을 설치하여 코드 완료, 구문 강조 및 디버깅과 같은 기능을 얻습니다. 디버거를 사용하여 코드를 단계별로 추적하고 오류를 찾아 수정하십시오. 버전 제어를 위해 git을 통합합니다. 코드 서식 도구를 사용하여 코드 일관성을 유지하십시오. 라인 도구를 사용하여 잠재적 인 문제를 미리 발견하십시오.

VS 코드는 Windows 8에서 실행될 수 있지만 경험은 크지 않을 수 있습니다. 먼저 시스템이 최신 패치로 업데이트되었는지 확인한 다음 시스템 아키텍처와 일치하는 VS 코드 설치 패키지를 다운로드하여 프롬프트대로 설치하십시오. 설치 후 일부 확장은 Windows 8과 호환되지 않을 수 있으며 대체 확장을 찾거나 가상 시스템에서 새로운 Windows 시스템을 사용해야합니다. 필요한 연장을 설치하여 제대로 작동하는지 확인하십시오. Windows 8에서는 VS 코드가 가능하지만 더 나은 개발 경험과 보안을 위해 새로운 Windows 시스템으로 업그레이드하는 것이 좋습니다.

PHP는 1994 년에 시작되었으며 Rasmuslerdorf에 의해 개발되었습니다. 원래 웹 사이트 방문자를 추적하는 데 사용되었으며 점차 서버 측 스크립팅 언어로 진화했으며 웹 개발에 널리 사용되었습니다. Python은 1980 년대 후반 Guidovan Rossum에 의해 개발되었으며 1991 년에 처음 출시되었습니다. 코드 가독성과 단순성을 강조하며 과학 컴퓨팅, 데이터 분석 및 기타 분야에 적합합니다.

vs 코드에서는 다음 단계를 통해 터미널에서 프로그램을 실행할 수 있습니다. 코드를 준비하고 통합 터미널을 열어 코드 디렉토리가 터미널 작업 디렉토리와 일치하는지 확인하십시오. 프로그래밍 언어 (예 : Python의 Python Your_file_name.py)에 따라 실행 명령을 선택하여 성공적으로 실행되는지 여부를 확인하고 오류를 해결하십시오. 디버거를 사용하여 디버깅 효율을 향상시킵니다.

VS 코드 확장은 악의적 인 코드 숨기기, 취약성 악용 및 합법적 인 확장으로 자위하는 등 악성 위험을 초래합니다. 악의적 인 확장을 식별하는 방법에는 게시자 확인, 주석 읽기, 코드 확인 및주의해서 설치가 포함됩니다. 보안 조치에는 보안 인식, 좋은 습관, 정기적 인 업데이트 및 바이러스 백신 소프트웨어도 포함됩니다.
