파이썬의 Zip 목록
저는 목록을 "집적"하는 방법을 배우려고 합니다.이를 위해 특정 시점에 다음을 수행하는 프로그램이 있습니다.
x1, x2, x3 = stuff.calculations(withdataa)
이것은 나에게 3개의 목록을 줍니다.x1
,x2
,그리고.x3
각각, 예를 들어, 20 사이즈.
이제, 나는.
zipall = zip(x1, x2, x3)
하지만, 내가 할 때:
print "len of zipall %s" % len(zipall)
저는 20점을 받았는데, 제가 예상했던 것과는 다릅니다.3개 예상했어요.저는 제가 근본적으로 잘못된 일을 하고 있다고 생각합니다.
당신이zip()
각각 20개의 요소를 포함하는 세 개의 리스트를 함께하면, 결과는 20개의 요소를 가집니다.각 요소는 세 개의 튜플입니다.
직접 확인:
In [1]: a = b = c = range(20)
In [2]: zip(a, b, c)
Out[2]:
[(0, 0, 0),
(1, 1, 1),
...
(17, 17, 17),
(18, 18, 18),
(19, 19, 19)]
각 튜플에 포함된 요소의 수를 확인하기 위해 첫 번째 요소의 길이를 조사할 수 있습니다.
In [3]: result = zip(a, b, c)
In [4]: len(result[0])
Out[4]: 3
물론 목록이 비어 있으면 작동하지 않습니다.
zip
많은 목록을 좋아함
a: a1 a2 a3 a4 a5 a6 a7...
b: b1 b2 b3 b4 b5 b6 b7...
c: c1 c2 c3 c4 c5 c6 c7...
그리고 항목이 3-튜플인 하나의 목록으로 "지핑"합니다.(ai, bi, ci)
지퍼를 왼쪽에서 오른쪽으로 수평으로 그리는 것을 상상해 보세요.
Python 2.7에서는 이 기능이 제대로 작동했을 수 있습니다.
>>> a = b = c = range(20)
>>> zip(a, b, c)
그러나 Python 3.4에서는 그래야 합니다(그렇지 않으면 결과는 다음과 같습니다).<zip object at 0x00000256124E7DC8>
):
>>> a = b = c = range(20)
>>> list(zip(a, b, c))
zip
반복 가능한 인수의 요소를 포함하는 튜플로 채워진 새 목록을 만듭니다.
>>> zip ([1,2],[3,4])
[(1,3), (2,4)]
각 요소가 목록인 튜플을 만드는 것이 좋습니다.
파이썬 3에서 zip
대신 반복기를 반환하고 압축된 튜플을 가져오려면 목록 함수로 전달해야 합니다.
x = [1, 2, 3]; y = ['a','b','c']
z = zip(x, y)
z = list(z)
print(z)
>>> [(1, 'a'), (2, 'b'), (3, 'c')]
그럼 다음으로unzip
압축된 반복기를 다시 사용할 수 있습니다.
x_back, y_back = zip(*z)
print(x_back); print(y_back)
>>> (1, 2, 3)
>>> ('a', 'b', 'c')
튜플 대신 원래 형태의 목록이 필요한 경우:
x_back, y_back = zip(*z)
print(list(x_back)); print(list(y_back))
>>> [1,2,3]
>>> ['a','b','c']
예
numbers = [1,2,3]
letters = 'abcd'
zip(numbers, letters)
# [(1, 'a'), (2, 'b'), (3, 'c')]
입력
반복 가능한 항목 0개 이상 [1](예: 목록, 문자열, 튜플, 사전)
출력(리스트)
첫 번째 튜플 = (숫자의 element_1, 문자의 element_1)
두 번째 튜플 = (e_2 숫자, e_2 문자)
…
n번째 튜플 = (e_n 숫자, e_n 문자)
- 튜플 목록: n은 가장 짧은 인수(입력)의 길이입니다.
- len(접두사) == 3 < len(글자) == 4 → 짧은 = 3 → 반환 3 튜플
- 각 튜플의 길이 = 인수의 수(각 튜플이 각 인수에서 요소를 취함)
- args = (문자, 문자); len(인수) == 2 → 2개의 요소가 있는 튜플
i
tuple = (supply_i arg1, element_i arg2…, element_i argn
)
가장자리 케이스
빈 문자열: len(str) = 0 = 튜플 없음
단일 문자열: len(str) == 렌(인수)이 있는 튜플 2개 == 요소 1개
zip()
# []
zip('')
# []
zip('hi')
# [('h',), ('i',)]
집인 액션!
두 개의 목록으로 사전 만들기 [2]
keys = ["drink","band","food"]
values = ["La Croix", "Daft Punk", "Sushi"]
my_favorite = dict( zip(keys, values) )
my_favorite["drink"]
# 'La Croix'
my_faves = dict()
for i in range(len(keys)):
my_faves[keys[i]] = values[i]
zip
간결한 입니다.
표의 열 인쇄
[3]을 "패딩"이라고 합니다.f(*[arg1,arg2,arg3]) == f(arg1, arg2, arg3)
student_grades = [
[ 'Morty' , 1 , "B" ],
[ 'Rick' , 4 , "A" ],
[ 'Jerry' , 3 , "M" ],
[ 'Kramer' , 0 , "F" ],
]
row_1 = student_grades[0]
print row_1
# ['Morty', 1, 'B']
columns = zip(*student_grades)
names = columns[0]
print names
# ('Morty', 'Rick', 'Jerry', 'Kramer')
추가 크레딧:압축 풀기
zip(*args)
지가있때라 "핑해제불 "다니립고 "의 에 "zip
numbers = (1,2,3)
letters = ('a','b','c')
zipped = zip(numbers, letters)
print zipped
# [(1, 'a'), (2, 'b'), (3, 'c')]
unzipped = zip(*zipped)
print unzipped
# [(1, 2, 3), ('a', 'b', 'c')]
unzipped
= 각.tuple_1 = 각 ziped tuple.tuple_1 = 각 ziped tuple_2 e1. ▁e e2zipped
각주
- 멤버를 한 번에 하나씩 반환할 수 있는 개체(예: list [1,2,3], 문자열 'I like codin', 튜플(1,2,3), 사전 {'a':1, 'b':2})
- {key1:value1, key2:value2...}
- "포장 풀기"(*)
*
드코:
# foo - function, returns sum of two arguments
def foo(x,y):
return x + y
print foo(3,4)
# 7
numbers = [1,2]
print foo(numbers)
# TypeError: foo() takes exactly 2 arguments (1 given)
print foo(*numbers)
# 3
*
잡았다numbers
"해제"는의 Arg(1arg) 및 2개 2개 Arg로 "분할 "합니"로 만듭니다.
기본적으로 zip 기능은 Python의 목록, 튜플 및 사전에서 작동합니다.IPython을 사용하는 경우 zip을 입력하면 됩니까?그리고 zip()이 무엇에 관한 것인지 확인합니다.
IPython을 사용하지 않는 경우 "pip install ipython"을 설치합니다.
목록의 경우
a = ['a', 'b', 'c']
b = ['p', 'q', 'r']
zip(a, b)
은 출은입니다.[('a', 'p'), ('b', 'q'), ('c', 'r')
사전의 경우:
c = {'gaurav':'waghs', 'nilesh':'kashid', 'ramesh':'sawant', 'anu':'raje'}
d = {'amit':'wagh', 'swapnil':'dalavi', 'anish':'mane', 'raghu':'rokda'}
zip(c, d)
출력은 다음과 같습니다.
[('gaurav', 'amit'),
('nilesh', 'swapnil'),
('ramesh', 'anish'),
('anu', 'raghu')]
완성도를 위해서입니다.
압축된 목록의 길이가 같지 않은 경우.결과 목록의 길이는 오류가 발생하지 않는 가장 짧은 길이가 됩니다.
>>> a = [1]
>>> b = ["2", 3]
>>> zip(a,b)
[(1, '2')]
짚에 관한 매우 높은 순위의 질문이기 때문에 여기에 추가할 가치가 있습니다. zip
관용적인 Python은 훌륭하지만 큰 목록에서는 확장성이 전혀 좋지 않습니다.
다음 대신:
books = ['AAAAAAA', 'BAAAAAAA', ... , 'ZZZZZZZ']
words = [345, 567, ... , 672]
for book, word in zip(books, words):
print('{}: {}'.format(book, word))
사용하다izip
현대적인 처리의 경우 L1 캐시 메모리에 저장되며 더 큰 목록에서 훨씬 더 성능이 좋습니다.간단히 추가할 수 있습니다.i
:
for book, word in izip(books, words):
print('{}: {}'.format(book, word))
언급URL : https://stackoverflow.com/questions/13704860/zip-lists-in-python
'programing' 카테고리의 다른 글
어떻게 "참조" 값을 소방서에 삽입합니까? (0) | 2023.07.01 |
---|---|
레이지 초기화예외: 프록시를 초기화할 수 없음 - 세션 없음 (0) | 2023.07.01 |
모의 서비스/구성요소를 사용한 스프링 부트 통합 테스트 (0) | 2023.07.01 |
Ajax 업데이트 후 jQuery에서 이벤트 다시 바인딩(업데이트 패널) (0) | 2023.07.01 |
ASP.NET MVC - QueryString 값 가져오기 (0) | 2023.07.01 |