Soru Python'daki tuples listesi üzerinde nasıl numaralandırırım?


Bunun gibi bazı kodlarım var:

letters = [('a', 'A'), ('b', 'B')]
i = 0
for (lowercase, uppercase) in letters:
    print "Letter #%d is %s/%s" % (i, lowercase, uppercase)
    i += 1

Benim için "i" değişkenine dikkat edebilecek bir enumerate () işlevi olduğu söylendi:

for i, l in enumerate(['a', 'b', 'c']):
    print "%d: %s" % (i, l)

Bununla birlikte, ikisini nasıl birleştireceğimi anlayamıyorum: Söz konusu liste tupllerden yapıldığında numaralandırmayı nasıl kullanırım? Bunu yapmak zorunda mıyım?

letters = [('a', 'A'), ('b', 'B')]
for i, tuple in enumerate(letters):
    (lowercase, uppercase) = tuple
    print "Letter #%d is %s/%s" % (i, lowercase, uppercase)

Yoksa daha zarif bir yolu var mı?


34
2018-05-11 18:20


Menşei


itertools vs numaralandır: aralarında seçim yaparken nelere dikkat etmeliyiz? - spazm


Cevaplar:


Bunu yapmanın temiz bir yolu:

letters = [('a', 'A'), ('b', 'B')]
for i, (lowercase, uppercase) in enumerate(letters):
    print "Letter #%d is %s/%s" % (i, lowercase, uppercase)

79
2018-05-11 18:23



Bu ne denir? Bu sözdizimi hakkında daha fazla durmak istiyorum. - Zak
@Zak: Eğer atamayı kastediyorsanız (lowercase, uppercase)buna "açmak" denir. - RichieHindle


Ben böyle yaparım.

import itertools

letters = [('a', 'A'), ('b', 'B')]
for i, lower, upper in zip(itertools.count(),*zip(*letters)):
    print "Letter #%d is %s/%s" % (i, lower, upper)

DÜZENLEME: Paketin açılması gereksiz hale gelir. Bu, kullanım durumunuza göre çalışabilecek ya da olmayabilecek daha kompakt bir yoldur:

import itertools

letters = [('a', 'A'), ('b', 'B')]
for i in zip(itertools.count(),*zip(*letters)):
    print "Letter #%d is %s/%s" % i

3
2018-05-11 19:39





Bu şekilde de yapabilirsiniz:

letters = [('a', 'A'), ('b', 'B')]
for i, letter in enumerate(letters):
    print "Letter #%d is %s/%s" % (i, letter[0], letter[1])

0
2017-12-10 17:05