Как удалить дубликаты только один раз из списка, сравнив их с другим списком в Python 3

#python #python-3.x #list #random #sample

Вопрос:

Я пытаюсь написать карточную игру, в которой картам присваиваются числовые значения.

 a = [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3]
b = [1, 2] 
 

Как мне удалить b (карты, которые вы берете из колоды) a , чтобы получить:

 c = [1, 1, 1, 2, 2, 2, 3, 3, 3, 3]
 

Или… Как мне отобрать случайную выборку a , чтобы составить отдельный список b ?

Ответ №1:

random.sample(a, n) даст вам образец, где n указан размер выборки, который вы хотите:

 >>> a = [1,1,1,1,2,2,2,2,3,3,3,3]
>>> random.sample(a, 5)
[2, 1, 3, 2, 2]
 

В качестве альтернативы вы можете random.shuffle(a) и рисовать n карты с самого начала:

 >>> random.shuffle(a)
>>> a
[2, 1, 2, 2, 1, 1, 1, 3, 2, 3, 3, 3]
>>> a[:5]
[2, 1, 2, 2, 1]
 

Ответ №2:

Вы можете использовать .remove() .

remove() — Удалите первое вхождение значения. Повышается ValueError , если значение отсутствует.

 a = [1,1,1,1,2,2,2,2,3,3,3,3]
b = [1,2] 
a.remove(b[0])
a.remove(b[1])
print(a)
 

Или:

 a = [1,1,1,1,2,2,2,2,3,3,3,3]
b = [1,2] 
for i in b:
    a.remove(i)
print(a)
 

Если вам нужен отдельный список, вы можете создать копию списка a

 a = [1,1,1,1,2,2,2,2,3,3,3,3]
b = [1,2] 
c=a.copy()
for i in b:
    c.remove(i)
print(c)
 

Ответ №3:

 import random

Deck_lst = [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3]
Deck_lst_sequence = [i for i, v in enumerate(Deck_lst)]
Draw_cards_index = random.sample(Deck_lst_sequence, 2)
Draw_cards_value = []
for Draw_card in Draw_cards_index:
    Draw_cards_value.append(Deck_lst[Draw_card])
    Deck_lst.remove(Deck_lst[Draw_card])


print(Deck_lst)
print(Draw_cards_value)