programing

파이썬의 Zip 목록

bestprogram 2023. 7. 1. 09:04

파이썬의 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 문자)

  1. 튜플 목록: n은 가장 짧은 인수(입력)의 길이입니다.
    • len(접두사) == 3 < len(글자) == 4 → 짧은 = 3 → 반환 3 튜플
  2. 각 튜플의 길이 = 인수의 수(각 튜플이 각 인수에서 요소를 취함)
    • args = (문자, 문자); len(인수) == 2 → 2개의 요소가 있는 튜플
  3. ituple = (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

각주

  1. 멤버를 한 번에 하나씩 반환할 수 있는 개체(예: list [1,2,3], 문자열 'I like codin', 튜플(1,2,3), 사전 {'a':1, 'b':2})
  2. {key1:value1, key2:value2...}
  3. "포장 풀기"(*)

* 드코:

# 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