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

#python-3.x

Вопрос:

Например, у меня есть 2 списка:

 list1 = [6,6,6,6,6,6,6]
list2 = [0,2,4]
 

Если в и есть одинаковые индексы list1 list2 , мне нужно удалить эти индексы из list1 , потому что я должен суммировать уникальные индексы из list1, например:

 a = [1,2,3,4,5]
b = [0,2,4]

x = [a.index(i) for i in a]
y = [b.index(j) for j in b]

for idx in y:
    if idx in x:
        x.remove(idx)
print(sum(x))

printed is >> 7
 

Я попробовал это, но не сработало, если в list1

 a = [6,6,6,6,6,6,6]
b = [0,2,4]

x = [a.index(i) for i in a]
y = [b.index(j) for j in b]

for idx in y:
    if idx in x:

        x.remove(idx)

printed is >> 0
 

Комментарии:

1. Вы имеете в виду удаление чисел , присутствующих в list2 из list1 , если они присутствуют в list1 ? Поскольку индексы ссылаются на местоположение значения в списке, например, в [1,2,3], 1 находится в индексе 0, 2 находится в индексе 1 и т. Д. И удаление одних и тех же индексов не имеет смысла, так как все индексы будут одинаковыми до конца меньшего списка из двух

2. и вот почему я спросил, как это сделать, когда у меня в списке 6,6,6,6, каждый индекс одинаков и может удалить только первый индекс.

Ответ №1:

Индексы и значения различны. В одном списке никогда не будет одного и того же индекса дважды. Вы получаете их индекс по их значению, однако функция index(значение) дает вам первый индекс, соответствующий вашему значению. Взгляните на:

 a, b, x = [1,2,3,4,5,6,7], [1,2,3], 0
c, d = len(a), len(b)
if d < c:
    d, c = len(a), len(b)
for i in range(c, d):
    x  = i
print(x)
 

Комментарии:

1. попробуйте включить 6,6,6,6,6 в список, и вы увидите, нет ли одинаковых индексов.

Ответ №2:

Ваш вопрос не очень ясен, поэтому вот два ответа:

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

 a = [1,2,3,4,5]
b = [0,2,4]

# We create a set in order to have O(1) operations to check if an element is in b
b_set = set(b) 

# We sum on the values of a that are not in b
res = sum(x for x in a if x not in b_set)

print(res)
>>> 9
 

Если вы хотите суммировать элементы первого списка, которые не имеют своего ранга/индекса во втором списке, способ сделать это может быть:

 a = [1,2,3,4,5]
b = [0,2,4]

# We create a set in order to have O(1) operations to check if an element is in b
b_set = set(b) 

# We sum on the values of a that don't have their rank/index in b
res = sum(x for (i, x) in enumerate(a) if i not in b_set)

print(res)
>>> 6
 

Комментарии:

1. Мне нужно это делать, когда в списке есть те же значения, что и 6,6,6,6, а в другом списке есть 1,2,3 или то, что вы хотите.