2017-01-30 6 views
-2

Как проверить, включен ли список в другой, но только его часть? Под этим я имею в виду:Сравнение некоторых элементов на Python

list_a = [1, 2, 3, 4, 5, 6]

list_b = [4, 2, 5, 4, 7, 7]

Я просто хотите проверить, является ли list_b чем-то вроде [*, 2, *, 4, *, *, *]. (* означает любой символ/номер)

EDIT 1: более конкретно, я хочу проверить, включен ли список [*, 2, *, 4, *, *, *] в любой другой список.

Например, она будет включена в [1, 4, 5, , 7, , 8]

EDIT 2: 2 будучи во втором положении и 4 в четвертом является совпадение. То, что я пытаюсь достичь, это проверить, что шаблон списка включен в другой список. В списке шаблонов должны быть включены не все элементы. Например, проверьте, включен ли pattern_list = [foo, foo, 8, foo, foo, foo, 7] в другой список = [foo, foo, foo, foo, foo, 8, foo, foo, foo, 7, foo , foo]

+0

Как вы попытались решить эту проблему? – inspectorG4dget

+0

Ваш вопрос непонятен. Я не могу связать ваш оператор * «Как проверить, включен ли список в другой» * с вашим примером '[*, 2, *, 4, *, *, *]'. Пожалуйста, объясните логику, лежащую в ее основе. –

+0

Покажите нам примерный код и где у вас есть конкретная проблема. – Alex

ответ

1

Это вы имели в виду?

>>> list_a = [1, 2, 3, 4, 5, 6] 
>>> list_b = [4, 2, 5, 4, 7, 7] 
>>> [x for x,y in zip(list_a, list_b) if x == y] 
[2, 4] 
1
def allUnique(L): 
    for i in L: 
     if i != L[0]: return False 
    return True 

In [21]: list_a = [1, 2, 3, 4, 5, 6] 

In [22]: list_b = [4, 2, 5, 4, 7, 7] 

In [23]: answer = [t[0] if allUnique(t) else "*" for t in zip(list_a, list_b)] 

In [24]: answer 
Out[24]: ['*', 2, '*', 4, '*', '*'] 
+1

'allUnique' вызывается на кортежах ... не дает никакой пользы, которую я могу видеть над' if t [0] == t [1] ' – TemporalWolf

+0

@TemporalWolf: он лучше масштабируется с помощью k-кортежей, где k> 2 – inspectorG4dget

+0

2 находясь во второй позиции, а 4 в четвертом - совпадение. То, что я пытаюсь достичь, это проверить, что шаблон списка включен в другой список. В списке шаблонов должны быть включены не все элементы. Например, Check является pattern_list = [foo, foo, 8, foo, foo, foo, 7] включен в другой список. –

0

Вы можете использовать что-то вроде этого:

>>>a = [1, 2, 3, 4]

>>>b = [3, 67, 1]

>>>list(set(a).intersection(set(b)))

>>>[1, 3]