Python ، باستخدام وظيفة zip (): الحصول على عناصر قوائم متعددة في وقت واحد

اعمال

تجمع الوظيفة المدمجة في Python zip () بين عناصر كائنات متعددة قابلة للتكرار (قوائم ، مجموعات ، إلخ) وتُستخدم لاسترداد عناصر قوائم متعددة في حلقة for.

يصف هذا القسم الاستخدام التالي لوظيفة zip ().

  • احصل على عناصر قوائم متعددة في حلقة for.
  • التعامل مع عدد مختلف من العناصر
    • zip():ستتجاهل الوظيفة العناصر الزائدة عن الحد.
    • itertools.zip_longest():هذه الوظيفة سوف تملأ العناصر المفقودة.
  • احصل على قائمة مجموعات عناصر متعددة العناصر.

احصل على عناصر قوائم متعددة في حلقة for.

إذا كنت تريد استرداد واستخدام عناصر كائنات متعددة قابلة للتكرار (قوائم ، مجموعات ، إلخ) في نفس الوقت في حلقة for ، فحددها كوسيطات لوظيفة zip ().

names = ['Alice', 'Bob', 'Charlie']
ages = [24, 50, 18]

for name, age in zip(names, ages):
    print(name, age)
# Alice 24
# Bob 50
# Charlie 18

ليس فقط اثنين ، بل ثلاثة أو أكثر أيضًا.

points = [100, 85, 90]

for name, age, point in zip(names, ages, points):
    print(name, age, point)
# Alice 24 100
# Bob 50 85
# Charlie 18 90

التعامل مع عدد مختلف من العناصر

تتجاهل وظيفة zip () عددًا كبيرًا من العناصر.

في وظيفة zip () ، إذا كان عدد العناصر في كل قائمة مختلفًا ، فسيتم إرجاع العدد الأقل (الأقصر) من العناصر ، وسيتم تجاهل العدد الأكبر.

names = ['Alice', 'Bob', 'Charlie', 'Dave']
ages = [24, 50, 18]

for name, age in zip(names, ages):
    print(name, age)
# Alice 24
# Bob 50
# Charlie 18

ستملأ الدالة itertools.zip_longest () العناصر المفقودة.

باستخدام zip_longest () في الوحدة النمطية itertools للمكتبة القياسية ، من الممكن ملء العناصر المفقودة بقيم عشوائية عندما يكون عدد العناصر في كل قائمة مختلفًا.

بشكل افتراضي ، يتم ملؤه بـ بلا.

from itertools import zip_longest

names = ['Alice', 'Bob', 'Charlie', 'Dave']
ages = [24, 50, 18]

for name, age in zip_longest(names, ages):
    print(name, age)
# Alice 24
# Bob 50
# Charlie 18
# Dave None

إذا تم تحديد وسيطة fillvalue ، فسيتم تعبئتها بهذه القيمة.

for name, age in zip_longest(names, ages, fillvalue=20):
    print(name, age)
# Alice 24
# Bob 50
# Charlie 18
# Dave 20

حتى إذا كانت هناك قوائم متعددة بها عناصر مفقودة ، فإن القيمة المراد تعبئتها تكون موحدة. لا يمكن تحديد قيم مختلفة.

points = [100, 85]

for name, age, point in zip_longest(names, ages, points, fillvalue=20):
    print(name, age, point)
# Alice 24 100
# Bob 50 85
# Charlie 18 20
# Dave 20 20

من الممكن تحديد قيمة مختلفة باستخدام zip_longest () داخل zip_longest () ، لكن هذا ليس عمليًا لأنك تحتاج إلى معرفة العناصر المفقودة في القائمة مسبقًا.

إذا كنت ترغب في ملء قوائم متعددة بعدد غير معروف من العناصر ، ولكل منها قيمة مختلفة ، فيمكن النظر في الإجراء التالي.

  1. تحديد القيم لملء جميع القوائم.
  2. احصل على أقصى عدد من العناصر
  3. املأ كل القوائم بأقصى عدد من العناصر
  4. باستخدام وظيفة zip ()
fill_name = 'XXX'
fill_age = 20
fill_point = 50

len_names = len(names)
len_ages = len(ages)
len_points = len(points)

max_len = max(len_names, len_ages, len_points)

names = names + [fill_name] * (max_len - len_names)
ages = ages + [fill_age] * (max_len - len_ages)
points = points + [fill_point] * (max_len - len_points)

print(names)
print(ages)
print(points)
# ['Alice', 'Bob', 'Charlie', 'Dave']
# [24, 50, 18, 20]
# [100, 85, 50, 50]

for name, age, point in zip(names, ages, points):
    print(name, age, point)
# Alice 24 100
# Bob 50 85
# Charlie 18 50
# Dave 20 50

في عملية ملء أكبر عدد من العناصر ، نقوم بما يلي.

  • بدء قائمة ذات قيمة عشوائية وعدد من العناصر
  • + عامل لضم القوائم معا

إذا حولنا هذا إلى دالة ، فستبدو هكذا. يتم تحديد القائمة الأصلية والقيم التي تملأ القائمة كوسائط متكررة (قائمة أو مجموعة) ، على التوالي.

def my_zip_longest(iterables, fillvalues):
    max_len = max(len(i) for i in iterables)
    return zip(*[list(i) + [v] * (max_len - len(i)) for i, v in zip(iterables, fillvalues)])

for name, age, point in my_zip_longest((names, ages, points), ('XXX', 20, 50)):
    print(name, age, point)
# Alice 24 100
# Bob 50 85
# Charlie 18 50
# Dave 20 50

يستخدم تدوين فهم القائمة وتوسيع القائمة بواسطة *.

احصل على قائمة مجموعات عناصر متعددة العناصر.

ترجع الدالة zip () مكررًا (كائن مضغوط) وهو مجموعة من عناصر كائنات متعددة قابلة للتكرار.
يمكن استخدامه أيضًا خارج حلقة for ، ولا يقتصر الهدف على القوائم.

names = ['Alice', 'Bob', 'Charlie']
ages = (24, 50, 18)

z = zip(names, ages)
print(z)
print(type(z))
# <zip object at 0x10b57b888>
# <class 'zip'>

إذا كنت ترغب في الحصول على قائمة بعناصر كائنات متعددة قابلة للتكرار في شكل مجموعة ، فاستخدم list () لإنشاء قائمة.

l = list(zip(names, ages))
print(l)
print(type(l))
print(type(l[0]))
# [('Alice', 24), ('Bob', 50), ('Charlie', 18)]
# <class 'list'>
# <class 'tuple'>
Copied title and URL