2013-11-25 3 views
1

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

a= ["1","2","3","4","5"] 

b= ["2","3","6","4","7"] 

e = (["1","3","2","4","5"],["2","3","6","4","7"]) 


CombinationFound = [] 
for i in e: 
    if i == a: 
     CombinationFound = True 
     break; 
    else: 
     CombinationFound = False 

она должна возвращать верно, так как ["1","2","3","4","5"] и ["1","3","2","4","5"] имеют одинаковые значения

+1

Почему 'CombinationFound' список? – Bryan

+0

Вы можете использовать 'if i in a:', чтобы проверить, находится ли элемент 'i' в списке' a'. –

ответ

0

Попробуйте конвертировать эти списки в наборы:

def isthesame(a,b): 
    return set(b) == set(a) 

Например, если у вас есть:

a= ["1","2","3","4","5"] 
b= ["2","3","6","4","7"] 

Это решение должно работать для списков, которые не имеют duplicit пунктов.

+1

'isthesame (" cat "," cart ")' возвращает 'True'. Это намеренно? – Kevin

+0

@Kevin Вы не сравнили два списка, а две строки. Попробуйте использовать 'isthesame ([" cat "], [" cart "])' – nio

+1

Как насчет 'isthesame ([1,2,3], [1,2,3,4,5])', который также возвращает 'true'? – Kevin

0

Вам необходимо преобразовать список, в котором вы пытаетесь сопоставлять, с чем-то, на что вы можете сравнить, не заботясь о первоначальном заказе. Если количество отображаемых элементов списка списка подсчитывается, используйте отсортированные списки. Если это не так, используйте наборы.

list_to_match = sorted(a) 
combination_found = False 
for i in e: 
    if sorted(i) == list_to_match: 
     combination_found = True 
     break 

Эта версия будет отличать списки с различным числом повторяющихся элементов - то есть, [0, 1, 1, 2] не соответствует [0, 1, 1, 1, 2]. Если вы не заботитесь о том, что возможности, использовать set(a) и set(i) вместо:

set_to_match = set(a) 
combination_found = False 
for i in e: 
    if set(i) == set_to_match: 
     combination_found = True 
     break 

Или, для более краткой версии, используйте встроенную функцию any с выражением генератора:

list_to_match = sorted(a) 
combination_found = any(sorted(i) == list_to_match for i in e) 
0

Python sets - это намного лучшая реализация для вашей конкретной проблемы.

Наборы представляют собой математические объекты, содержащие данные, но имеют методы определения союзов, пересечений, различий и т. Д. Между двумя коллекциями.

Использование:

set(a) == set(b) 

должно дать вам результат вы хотите. До тех пор, пока «аналогичным» вы подразумеваете «то же самое».

0

Различный способ сравнения без петли for:

found = any(set(a)==set(l) for l in e) 
0
def checker(list_of_lists, example): 
    for i in list_of_lists: 
     if tuple(sorted(i)) == tuple(sorted(example)): 
      return True 
    return False 
Смежные вопросы