2015-09-12 3 views
0

как сравнить более одного списка, ниже работает нормально для всего 2 списков, но что, если нужнеесравнение данных в списках Python

while (list1[0:1] == list2[0:1]): 
    if list1[1:2] > list2[1:2]: 
     print('list 1 wins') 
    elif list1[2:3] > list2[2:3]: 
     print('list 1 wins!') 
    elif list1[3:4] > list2[3:4]: 
     print('list 1 wins') 
    elif list1[4:5] > list2[4:5]: 
     print('list 1 wins') 
    elif list1[5:5] == list2[5:5]: 
     print('its a tie') 
    else: 
     print('list 2 wins') 
    break 
+1

Зачем использовать 'while'? в этом случае 'while' работает как' if' из-за 'break' –

+0

Самый низкий или самый высокий, вы используете оба в своем описании. В настоящее время он тестируется на самый высокий уровень. – AChampion

+0

Вам действительно нужно связать уникальную строку с каждым отдельным списком - (чтобы ее можно было напечатать как ваш пример? – wwii

ответ

0

ли вы рассмотреть вопрос об использовании для цикла?

синтаксис:

for value in list: 
    # do something 
    print value 

, а затем есть (zip function)

list1 = [1,2] 
list2 = [a,b] 
zip(list1, list2) # = [(1,a),(2,b)] 

С этими двумя инструментами один способен обеспечить действительно вещий решение вашей проблемы.

1

Как указано, список может быть непосредственно сравнен, без повторения через них.
Но если вы хотите работать с несколькими списками в то же время это идиоматическое использовать zip(), например:

for i1, i2 in zip(list1, list2): 
    if i1 > i2: 
     print("List 1 wins") 
     break 
    if i2 > i1: 
     print("List 2 wins") 
     break 
else: 
    print("It's a tie") 
1

Списки и кортежи можно сравнить, как и что при условии, что согласующие элементы сравнимы:

>>> list1=[50,9,5,4,5] 
>>> list2=[50,9,8,1,5] 
>>> list1 > list2 
False 
>>> list1 < list2 
True 

Это также означает, что вы можете заказать любое количество списков:

>>> lists = [list1, list2, list3] 
>>> lists.sort() 
+1

'' 'отсортированные (списки)' '' или '' 'lists.sort()' '' ...? – wwii

+0

@wwii thanks :) – bereal

0

Как говорит bereal, вы можете просто использовать для этого сравнение списков. Если связь не была проблемой, вы можете просто использовать max(), чтобы определить победителя, но для обработки связей вам нужно отсортировать всю коллекцию списков.

Например, этот код будет обрабатывать любое количество списков.

list1 = [50,9,5,4,5] 
list2 = [50,9,8,1,6] 
list3 = [50,9,8,1,5] 

lists = [(seq, i) for i, seq in enumerate((list1, list2, list3), 1)] 
lists.sort(reverse=True) 

if lists[0][0] == lists[1][0]: 
    print("it's a tie") 
else: 
    print("list {0} wins: {1}".format(lists[0][1], lists[0][0])) 

выход

list 2 wins: [50, 9, 8, 1, 6] 

Если изменить list2 обратно [50, 9, 8, 1, 6], то it's a tie и будет напечатан.


lists список кортежей, каждый кортеж, содержащий один из исходных списков и его порядковым номером, так что мы можем определить списки после кортежи были отсортированы. Сортировка будет сравнивать списки, и если два списка идентичны, то индексы также будут сравниваться, но это не влияет на желаемый результат.

BTW, list1[1:2] > list2[1:2] является расточительным. Он создает новую пару одиночных списков элементов & сравнивает их. Легче сравнивать сами элементы, например list1[1] > list2[1].

+0

спасибо PM 2Ring, это отлично работает для меня – noor