2013-07-27 2 views
0

Допустим, у меня есть несколько списков:Сравнение Размеры нескольких списков

A = [1] 
B = [3, 2] 
C = [5, 1, 6] 
D = [7, 4, 18] 

Я хочу, чтобы сравнить длину списков и выход длинный список из 4-х списков. Таким образом, в этом случае результат будет:

A, D contain the longest list(s). 

Я думал сравнивая их один за другим, но это будет довольно беспокойным и неэффективно впечатать. Есть ли способ сделать это с помощью пользовательской функции?

Я еще совсем новичок в Python, и я собираюсь мозг мертв ...

def fishing(): 
    global target_counter 
    target_counter = pHands_new[target].count(target_rank) 
    global card_counter 

    if target_counter >0: 
     for i in range(target_counter): 
      pHands_new[target].remove(target_rank) 
     for i in range(target_counter): 
      pHands_new[N].append(target_rank) 
     print "*"*70 
     print "HIT:", target_counter, "card(s) transferred" 
     print "*"*70 
     card_counter = pHands_new[N].count(target_rank) 
     if card_counter ==4: 
      for i in range(card_counter): 
       pHands_new[N].remove(target_rank) 
      pBooks(N) 
    else: 
     draw = GetTopCard(sDeck_new) 
     if draw == target_rank: 
      pHands_new[N].append(draw) 
      print "HIT: LUCKILY, You fished up the rank <"+draw+">" 
      card_counter = pHands_new[N].count(draw) 
      if card_counter ==4: 
       for i in range(card_counter): 
        pHands_new[N].remove(draw) 
       pBooks(N) 

     elif draw != target_rank: 
      pHands_new[N].append(draw) 
      print "MISS: You fished up the rank <"+draw+">" 
      card_counter = pHands_new[N].count(draw) 
      if card_counter ==4: 
       for i in range(card_counter): 
        pHands_new[N].remove(draw) 
       pBooks(N) 

def pBooks(player): 
     books[player].append(target_rank) 

Примечания:

-pHands_new является вложенным списком, есть 4 списков в пределах pHands_new

-N является текущим игроком

-target_rank является визитной карточкой, которая ориентирована на другой игрок

-Books - еще один вложенный список. Когда игрок имеет 4 одинаковой карты/ранга, он удаляется из руки игроков и помещается в книги.

Списков я сравниваю здесь книги [0] .... книга [3]

ответ

0
>>> a = [1] 
>>> b = [3, 2] 
>>> c = [5, 1, 6] 
>>> d = [7, 4, 18] 
>>> 
>>> max_len = len(max([a,b,c,d], key=len)) # max(map(len, [a,b,c,d])) 
>>> lists = { 
...  'a': a, 
...  'b': b, 
...  'c': c, 
...  'd': d, 
... } 
>>> names = [name for name in lists if len(lists[name]) == max_len] 
>>> print '{} contain the longest list(s).'.format(', '.join(names)) 
c, d contain the longest list(s). 

>>> a = [1, 2, 3, 4] 
>>> b = [3, 2] 
>>> c = [5, 1, 6] 
>>> d = [7, 4, 18] 
>>> 
>>> max_len = len(max([a,b,c,d], key=len)) # max(map(len, [a,b,c,d])) 
>>> lists = { 
...  'a': a, 
...  'b': b, 
...  'c': c, 
...  'd': d, 
... } 
>>> names = [name for name in lists if len(lists[name]) == max_len] 
>>> print '{} contain the longest list(s).'.format(', '.join(names)) 
a contain the longest list(s). 

books = [ 
    [1], 
    [3, 2], 
    [5, 1, 6], 
    [7, 4, 18], 
] 

max_len = len(max(books, key=len)) # max(map(len, books)) 
names = [str(i+1) for i, bs in enumerate(books) if len(bs) == max_len] 
print 'Book {} contain the longest list(s).'.format(', '.join(names)) 

# => Book 3, 4 contain the longest list(s). 
+0

Моей программа генерирует 4 списков, содержащих случайную количество элементов. Когда я использую этот код, он не сравнивает их правильно и выводит неверный самый длинный список (когда два списка имеют одинаковую длину, он выводит эти два списка, хотя может быть и другой, который длиннее) – Gaze

+0

@Gaze, Could вы показываете пример? – falsetru

+0

@Gaze, я добавил пример (код такой же, изменяется только переменная списка). В соответствии с этим вам не о чем беспокоиться. – falsetru

Смежные вопросы