كيف يمكنني تعداد () على قائمة من المجموعات في بيثون؟

StackOverflow https://stackoverflow.com/questions/849369

  •  21-08-2019
  •  | 
  •  

سؤال

ولقد حصلت على بعض التعليمات البرمجية مثل هذا:

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

ولقد قيل لي أن هناك وظيفة اعدد () التي يمكن أن تأخذ الرعاية من "أنا" متغير بالنسبة لي:

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

ولكن، وأنا لا يمكن معرفة كيفية الجمع بين الأمرين: كيف يمكنني استخدام تعداد عندما يتم القائمة في مسألة الصفوف؟ لا بد لي من القيام بذلك؟

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

وأم أن هناك طريقة أكثر أناقة؟

هل كانت مفيدة؟

المحلول

وهذا هو وسيلة نظيفة للقيام بذلك:

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

نصائح أخرى

وهذه هي الطريقة التي كنت تفعل ذلك:

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)

وتحرير: تفريغ يصبح زائدا عن الحاجة. هذا هو وسيلة أكثر إحكاما، والتي قد تعمل أم لا اعتمادا على حالة استخدامك:

import itertools

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

ويمكنك القيام بذلك عن الطريق أيضا:

letters = [('a', 'A'), ('b', 'B')]
for i, letter in enumerate(letters):
    print "Letter #%d is %s/%s" % (i, letter[0], letter[1])
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top