Python, Nggunakake fungsi zip (): Entuk unsur sawetara dhaptar bebarengan

Bisnis

Python kang dibangun ing zip fungsi () nggabungke unsur sawetara obyek iterable (dhaftar, tuples, etc.) lan digunakake kanggo njupuk unsur sawetara dhaptar ing daur ulang kanggo.

Bagean iki nerangake panggunaan fungsi zip () ing ngisor iki.

  • Entuk unsur pirang-pirang dhaptar ing daur ulang.
  • Dealing karo macem-macem nomer unsur
    • zip():Fungsi kasebut bakal nglirwakake unsur sing akeh banget.
    • itertools.zip_longest():Fungsi iki bakal ngisi unsur sing ilang.
  • Entuk dhaptar tuple unsur saka macem-macem iterables.

Entuk unsur pirang-pirang dhaptar ing daur ulang.

Yen sampeyan pengin njupuk lan nggunakake unsur sawetara obyek iterable (dhaptar, tuples, etc.) ing wektu sing padha ing daur ulang kanggo, nemtokaken minangka bantahan kanggo fungsi 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

Ora mung loro, nanging uga telu utawa luwih.

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

Dealing karo macem-macem nomer unsur

Fungsi zip () nglirwakake akeh unsur.

Ing zip () fungsi, yen nomer unsur ing saben dhaftar beda, nganti kurang (cendhek) nomer unsur bakal bali, lan nomer luwih bakal digatèkaké.

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

Fungsi itertools.zip_longest () bakal ngisi unsur sing ilang.

Nggunakake zip_longest () ing modul perpustakaan standar itertools, iku bisa kanggo isi unsur ilang karo nilai kasepakatan nalika nomer unsur ing saben dhaftar beda.

Kanthi gawan, diisi Ora Ana.

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

Yen argumen fillvalue ditemtokake, bakal diisi karo nilai kasebut.

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

Sanajan ana sawetara dhaptar kanthi unsur sing ilang, nilai sing kudu diisi seragam. Ora bisa nemtokake nilai sing beda.

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

Sampeyan bisa nemtokake nilai beda nggunakake zip_longest () nang zip_longest (), nanging ora praktis amarga sampeyan kudu ngerti ing advance kang unsur dhaftar ilang.

Yen sampeyan pengin ngisi pirang-pirang dhaptar kanthi jumlah unsur sing ora dingerteni, saben duwe nilai sing beda, prosedur ing ngisor iki bisa dianggep.

  1. Netepake nilai kanggo ngisi kabeh dhaptar.
  2. Entuk jumlah maksimum unsur
  3. Isi kabeh dhaptar nganti jumlah maksimum unsur
  4. Nggunakake fungsi 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

Ing proses ngisi nganti paling akeh unsur, kita nindakake ing ngisor iki.

  • Miwiti dhaptar kanthi nilai sewenang-wenang lan jumlah unsur
  • + operator kanggo nggabungake dhaptar bebarengan

Yen kita nguripake iki menyang fungsi, iku katon kaya iki. Dhaptar asli lan nilai sing ngisi dhaptar kasebut minangka argumen iterables (dhaftar utawa tuple).

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

Iki nggunakake notasi pangerten dhaptar lan ekspansi dhaptar kanthi *.

Entuk dhaptar tuple unsur saka macem-macem iterables.

Fungsi zip () ngasilake iterator (objek zip) sing minangka tuple unsur saka pirang-pirang obyek sing bisa diulang.
Uga bisa digunakake ing njaba kanggo daur ulang, lan target ora winates kanggo dhaptar.

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

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

Yen sampeyan pengin njaluk dhaptar unsur sawetara obyek iterable minangka tuple, nggunakake dhaftar () kanggo nggawe dhaftar.

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