পাইথনে জিপ তালিকা


151

আমি কীভাবে "জিপ" তালিকাগুলি শিখতে চাইছি। এই লক্ষ্যে, আমার একটি প্রোগ্রাম রয়েছে, যেখানে একটি নির্দিষ্ট সময়ে আমি নিম্নলিখিতগুলি করি:

x1, x2, x3 = stuff.calculations(withdataa)

এটি আমার তিন তালিকা দেয়, x1, x2, এবং x3, প্রতিটি বল, আকার 20।

এখন আমি করি:

zipall = zip(x1, x2, x3)

তবে, আমি যখন করি:

print "len of zipall %s" % len(zipall)

আমি 20 পেয়েছি, যা আমি প্রত্যাশা করি না। আমি তিনটি আশা করেছিলাম। আমি মনে করি আমি মৌলিকভাবে কিছু ভুল করছি।


4
আপনি ঠিক কী আশা zipকরছেন? কেন আপনার তিনটি তালিকা থাকা উচিত - এগুলি দেখতে কেমন হবে?
ড্যানিয়েল রোজম্যান

জিপ টিপলগুলির একটি তালিকা প্রদান করে।
ডেমো

উত্তর:


225

আপনি যখন zip()একসাথে তিনটি তালিকায় 20 টি উপাদান রেখেছেন তখন ফলাফলটির বিশটি উপাদান রয়েছে। প্রতিটি উপাদান একটি তিন-tuple হয়।

নিজের জন্য দেখুন:

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

অবশ্যই, তালিকাগুলি শুরু করার জন্য খালি থাকলে এটি কাজ করবে না।


1
লেন (ফলাফল [0]) কাজ করবে না। 'জিপ' অবজেক্ট সাবস্ক্রিপ্টযোগ্য নয়
গিলবার্টএস

2
পাইথন ২-এ জিলবার্ট zipএকটি তালিকা ফিরিয়ে দিয়েছেন। পাইথন 3 এ এটি পুনরুক্তিকারী
টমেরিকু

63

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)। বাম থেকে ডানে আনুভূমিকভাবে একটি জিপার আঁকার কল্পনা করুন।



36

পাইথন ২.7 এ এটি ভাল কাজ করতে পারে:

>>> a = b = c = range(20)
>>> zip(a, b, c)

তবে পাইথন ৩.৪-তে এটি হওয়া উচিত (অন্যথায়, ফলাফলটি এরকম হবে <zip object at 0x00000256124E7DC8>):

>>> a = b = c = range(20)
>>> list(zip(a, b, c))

28

zip পুনরাবৃত্তিযোগ্য আর্গুমেন্টগুলি থেকে উপাদানযুক্ত টিপলগুলিতে পূর্ণ একটি নতুন তালিকা তৈরি করে:

>>> zip ([1,2],[3,4])
[(1,3), (2,4)]

আমি আশা করি আপনি যা করার চেষ্টা করছেন তা এমন একটি টিউপল তৈরি করা যেখানে প্রতিটি উপাদান একটি তালিকা থাকে।


14

সূত্র: আমার ব্লগ পোস্ট (আরও ভাল ফর্ম্যাটিং)

উদাহরণ

numbers = [1,2,3]
letters = 'abcd'

zip(numbers, letters)
# [(1, 'a'), (2, 'b'), (3, 'c')]

ইনপুট

শূন্য বা আরও বেশি পুনরাবৃত্তিযোগ্য [1] (উদা। তালিকা, স্ট্রিং, টিপল, অভিধান)

আউটপুট (তালিকা)

1 ম টিপল = (সংখ্যার উপাদান_1, বর্ণগুলির উপাদান_1)

২ য় টিউপল = (ই ৩ নম্বর, ই ২ টি অক্ষর)

...

n-th tuple = (e_n সংখ্যা, ই_ অক্ষর)

  1. এন টিপলসের তালিকা: n হ'ল সংক্ষিপ্ত আর্গুমেন্টের ইনপুট (ইনপুট)
    • লেন (সংখ্যা) == 3 <লেন (অক্ষর) == 4 → সংক্ষিপ্ত = 3 3 3 টি টিপল ফেরত
  2. প্রতিটি টিউপল = দৈর্ঘ্যের দৈর্ঘ্য (টিপল প্রতিটি আর্গ থেকে একটি উপাদান নেয়)
    • args = (সংখ্যা, অক্ষর); লেন (আরগস) == 2 টি 2 টি উপাদান দিয়ে টিপল
  3. iম টিপল = (এলিমেন্ট_আই আর্গ 1, এলিমেন্ট_আই আরজি 2…, এলিমেন্ট_ আই আর্গ n)

এজ কেস

1) খালি স্ট্রিং: লেন (স্ট্র) = 0 = কোনও টিপল নেই

২) একক স্ট্রিং: লেন (স্ট্র) == লেন (টিপস) সহ ২ টি টিপল == ১ টি উপাদান

zip()
# []
zip('')
# []
zip('hi')
# [('h',), ('i',)]

জিপ ইন অ্যাকশন!

1. দুটি তালিকার মধ্যে একটি অভিধান তৈরি করুন [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 = e1। tuple_2 = প্রতিটি এর e2zipped

পাদটিকা

  1. একটি সদস্য তার সদস্যদের একবারে ফেরত দিতে সক্ষম (উদাহরণস্বরূপ [1,2,3], স্ট্রিং 'আমার কোডিন পছন্দ করে', টিপল (1,2,3), অভিধান {'এ': 1, 'বি' : 2})
  2. {কী 1: মান 1, কী 2: মান 2 ...
  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

*নেন numbers2 args মধ্যে (1 ARG) এবং "প্যাক না" তার '2 উপাদান


14

মূলত জিপ ফাংশন পাইথনের তালিকাগুলি, টিপলস এবং অভিধানগুলিতে কাজ করে। আপনি যদি আইপিথন ব্যবহার করছেন তবে কেবল জিপ টাইপ করবেন? এবং জিপ () কী সম্পর্কে তা পরীক্ষা করে দেখুন।

আপনি যদি আইপিথন ব্যবহার না করেন তবে কেবল এটি ইনস্টল করুন: "পিপ ইনস্টল আইপিথন"

তালিকার জন্য

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')]

1
জিপ (সি, ডি) জিপ করছে (তালিকা (সি), তালিকা (ডি))
স্টিফেন উডব্রিজ ২

13

ইন পাইথন 3 zip আয় কোনো ইটারেটরে পরিবর্তে এবং চাহিদা একটি তালিকা ফাংশন জিপ করা tuples পেতে প্রেরণ করতে হবে:

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']

1
প্রশ্ন ট্যাগে পাইথন ২.7 বলা হয়েছে; এটি পাইথন 3 এর জন্য Besides এছাড়াও, এই উত্তরটি ইতিমধ্যে এটির উল্লেখ করেছে।
0 0

8

সম্পূর্ণতার জন্য!

যখন জিপ করা তালিকার দৈর্ঘ্য সমান হয় না। ফলাফল তালিকার দৈর্ঘ্য কোনও ত্রুটি না ঘটলে স্বল্পতম হয়ে যাবে

>>> a = [1]
>>> b = ["2", 3]
>>> zip(a,b)
[(1, '2')]

1

আমি মনে করি না যে zipকোনও তালিকা ফিরে আসে। zipএকটি জেনারেটর প্রদান করে। list(zip(a, b))টিপলসের একটি তালিকা পেতে আপনাকে করতে হবে।

x = [1, 2, 3]
y = [4, 5, 6]
zipped = zip(x, y)
list(zipped)

1
প্রশ্ন ট্যাগে পাইথন ২.7 বলা হয়েছে; এটি পাইথন 3 এর জন্য Besides এছাড়াও, এই উত্তরটি ইতিমধ্যে এটির উল্লেখ করেছে।
0 0

1

এটি এখানে যুক্ত করার মতো কারণ এটি জিপের মতো উচ্চমানের প্রশ্ন। zipঅজস্র, অজস্র পাইথন - তবে এটি বৃহত তালিকার জন্য খুব ভাল স্কেল করে না।

পরিবর্তে:

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))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.