> 백엔드 개발 > 파이썬 튜토리얼 > Python의 고급 기능 나열

Python의 고급 기능 나열

高洛峰
풀어 주다: 2017-03-02 16:23:27
원래의
1764명이 탐색했습니다.

이 글은 주로 파이썬에서 리스트의 고급 기능을 자세하게 소개하고 있습니다. 관심있는 친구들은 참고하시면 됩니다.

리스트를 스택으로 사용하기: #Like 리스트를 스택처럼 사용하기

stack = [3, 4, 5] 
stack.append(6) 
stack.append(7) 
stack 
[3, 4, 5, 6, 7] 
stack.pop() #删除最后一个对象 
7 
stack 
[3, 4, 5, 6] 
stack.pop() 
6 
stack.pop() 
5 
stack 
[3, 4]
로그인 후 복사

목록을 대기열로 사용: #목록을 대기열처럼 사용

> from collections import deque #这里需要使用模块deque 
> queue = deque(["Eric", "John", "Michael"])
> queue.append("Terry")      # Terry arrives
> queue.append("Graham")     # Graham arrives
> queue.popleft()         # The first to arrive now leaves
'Eric'
> queue.popleft()         # The second to arrive now leaves
'John'
> queue              # Remaining queue in order of arrival
deque(['Michael', 'Terry', 'Graham'])
로그인 후 복사

세 가지 내장 함수: 세 가지 중요한 내장 함수

filter(), map() 및 Reduce().
1), filter(function, 시퀀스)::
함수에 따라 데이터를 필터링합니다. 목록 시퀀스

> def f(x): return x % 3 == 0 or x % 5 == 0
... #f函数为定义整数对象x,x性质为是3或5的倍数
> filter(f, range(2, 25)) #筛选
[3, 5, 6, 9, 10, 12, 15, 18, 20, 21, 24]
로그인 후 복사

2), map(function, 시퀀스):
map 함수는 함수의 규칙에 따라 목록 시퀀스를 구현합니다. function 동일한 처리를 수행합니다.
여기서의 순서는 목록에만 국한되지 않고 튜플도 사용할 수 있습니다.

> def cube(x): return x*x*x #这里是立方计算 还可以使用 x**3的方法
...
> map(cube, range(1, 11)) #对列表的每个对象进行立方计算
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
로그인 후 복사

참고: 여기의 매개변수 목록은 주로 사용자 정의 함수의 매개변수 수에 따라 달라집니다. 지도 기능은 다음과 같이 변환될 수 있습니다. def func( x,y) map(func, 시퀀스1, 시퀀스2) 예:

 seq = range(8)  #定义一个列表
> def add(x, y): return x+y #自定义函数,有两个形参
...
> map(add, seq, seq) #使用map函数,后两个参数为函数add对应的操作数,如果列表长度不一致会出现错误
[0, 2, 4, 6, 8, 10, 12, 14]
로그인 후 복사

3), 감소(함수, 시퀀스):
reduce 함수 함수는 목록의 첫 번째 숫자와 두 번째 숫자에 대해 함수 연산을 수행하고, 그 결과와 목록의 다음 데이터에 대해 함수 연산을 수행하는 등 함수 함수에 따라 순서대로 데이터를 연산하고, 루프는 계속됩니다...
예:

def add(x,y): return x+y
...
reduce(add, range(1, 11))
55
로그인 후 복사

목록 이해:
여기에서는 목록의 여러 응용 프로그램을 소개합니다. :
squares = [ x**2 for x in range(10)]
#생성된 목록의 제곱 계산 결과인 목록을 생성합니다. 목록 범위(10)로.
[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
#[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)] 여기에 생성된 목록이 있습니다. 목록의 각 항목은 튜플이고, 각 튜플은 x와 y로 구성되며, x는 목록 [1,2,3]에 의해 제공되고, y는 [3,1,4]에서 나오며 x = 규칙을 충족합니다. 와이.

중첩 목록 내포:
여기서는 번역하기 어렵기 때문에 예를 들어 보겠습니다.

matrix = [          #此处定义一个矩阵
...   [1, 2, 3, 4],
...   [5, 6, 7, 8],
...   [9, 10, 11, 12],
... ]
[[row[i] for row in matrix] for i in range(4)]
#[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
로그인 후 복사

여기서는 두 가지 수준의 중첩이 번거롭습니다. 간단히 설명하겠습니다. 행렬 행렬의 경우 행렬의 행은 행렬의 각 행을 추출하는 데 사용됩니다. 각 행의 목록을 가져와 목록을 생성한 다음 i는 다시 목록 목록을 생성하는 range(4)의 i에서 가져옵니다.

del 문:
목록에서 지정된 데이터를 삭제합니다. 예:

> a = [-1, 1, 66.25, 333, 333, 1234.5]
>del a[0] #删除下标为0的元素
>a
[1, 66.25, 333, 333, 1234.5]
>del a[2:4] #从列表中删除下标为2,3的元素
>a
[1, 66.25, 1234.5]
>del a[:] #全部删除 效果同 del a
>a
[]
로그인 후 복사

세트: 컬렉션

> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
>>> fruit = set(basket)        # create a set without duplicates
>>> fruit
set(['orange', 'pear', 'apple', 'banana'])
>>> 'orange' in fruit         # fast membership testing
True
>>> 'crabgrass' in fruit
False

>>> # Demonstrate set operations on unique letters from two words
...
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a                 # unique letters in a
set(['a', 'r', 'b', 'c', 'd'])
>>> a - b               # letters in a but not in b
set(['r', 'd', 'b'])
>>> a | b               # letters in either a or b
set(['a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'])
>>> a & b               # letters in both a and b
set(['a', 'c'])
>>> a ^ b               # letters in a or b but not both
set(['r', 'd', 'b', 'm', 'z', 'l'])
로그인 후 복사

사전: Dictionaries

>>> tel = {'jack': 4098, 'sape': 4139}
>>> tel['guido'] = 4127 #相当于向字典中添加数据
>>> tel
{'sape': 4139, 'guido': 4127, 'jack': 4098}
>>> tel['jack'] #取数据
4098
>>> del tel['sape'] #删除数据
>>> tel['irv'] = 4127   #修改数据
>>> tel
{'guido': 4127, 'irv': 4127, 'jack': 4098}
>>> tel.keys()    #取字典的所有key值
['guido', 'irv', 'jack']
>>> 'guido' in tel #判断元素的key是否在字典中
True
>>> tel.get('irv') #取数据
4127
로그인 후 복사

규칙을 사용하여 사전을 생성할 수도 있습니다:

>>> {x: x**2 for x in (2, 4, 6)}
{2: 4, 4: 16, 6: 36}
로그인 후 복사

enumerate(): 요소 및 하위 첨자 트래버스
enumerate 함수는 시퀀스의 요소와 해당 첨자를 순회하는 데 사용됩니다.

>>> for i, v in enumerate(['tic', 'tac', 'toe']):
...   print i, v
...
0 tic
1 tac
2 toe
로그인 후 복사

zip():
zip( )는 Python의 함수입니다. 일련의 반복 가능한 개체를 매개 변수로 받아들이고 개체의 해당 요소를 튜플로 묶은 다음 이러한 튜플로 구성된 목록을 반환하는 함수를 만듭니다. 전달된 매개변수의 길이가 동일하지 않은 경우, 반환되는 목록의 길이는 매개변수 중 길이가 가장 짧은 객체와 동일합니다. * 연산자를 사용하면 목록의 압축을 풀 수 있습니다.

>>> questions = ['name', 'quest', 'favorite color']
>>> answers = ['lancelot', 'the holy grail', 'blue']
>>> for q, a in zip(questions, answers):
...   print 'What is your {0}? It is {1}.'.format(q, a)
...
What is your name? It is lancelot.
What is your quest? It is the holy grail.
What is your favorite color? It is blue.
로그인 후 복사

zip에 대한 간단한 예:

>>> a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b)
[(1, 4), (2, 5), (3, 6)]
>>> zip(a,c)
[(1, 4), (2, 5), (3, 6)]
>>> zip(*zipped)
[(1, 2, 3), (4, 5, 6)]
로그인 후 복사

reversed() : 역방향

>>> for i in reversed(xrange(1,10,2)):
...   print i
...
로그인 후 복사

sorted(): sorted

> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
> for f in sorted(set(basket)):       #这里使用了set函数
...   print f
...
apple
banana
orange
pear
로그인 후 복사

Python의 집합은 다른 언어와 유사합니다. 이는 관계 테스트 및 중복 요소 제거를 포함한 기본 기능입니다.

루프 내부에서 반복하는 시퀀스를 변경하려면(예를 들어) 특정 항목을 복제하려면 먼저 복사본을 만드는 것이 좋습니다. 시퀀스를 반복해도 암시적으로 복사본이 만들어지지는 않습니다.

>>> words = ['cat', 'window', 'defenestrate']
>>> for w in words[:]: # Loop over a slice copy of the entire list.
...   if len(w) > 6:
...     words.insert(0, w)
...
>>> words
['defenestrate', 'cat', 'window', 'defenestrate']
로그인 후 복사

위 내용은 이 글의 전체 내용으로, 모든 분들의 공부에 도움이 되었으면 좋겠습니다.

Python의 고급 목록 기능과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿