Python создает новый список, который содержит элементы, не равные элементам одного и того же индекса двух других списков - PullRequest
0 голосов
/ 06 февраля 2019

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

Iу меня есть два списка с 10 целыми числами от 0 до 10, например:

list_1 = [0,3,2,5,7,2,3,5,9,2]

list_2 = [1,7,2,5,0,0,2,3,0,4]

Мне нужно понимание списка, которое создает новый список из 10 целых чисел, но каждый элемент не может быть равен одному и тому же элементу индекса двухсписки.

Пример вывода может быть следующим:

list_3 = [4,4,9,6,3,1,5,7,6,1]

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019
from random import randint

list_1 = [0,3,2,5,7,2,3,5,9,2]    
list_2 = [1,7,2,5,0,0,2,3,0,4]   
list_3 = []

for elem1 in list_1:
    for elem2 in list_2:
        x = randint(0, 9)
        if x != elem1 and x != elem2:
            list_3.append(x)
            break

print(list_3)

ВЫХОД:

[6, 9, 8, 2, 6, 8, 4, 8, 0, 5]

РЕДАКТИРОВАТЬ:

один вкладыш:

from random import randint

list_1 = [0,3,2,5,7,2,3,5,9,2]    
list_2 = [1,7,2,5,0,0,2,3,0,4]
n = 10

print([randint(0, n) for i in list_1 if i in list_2])

ВЫХОД:

[2, 9, 7, 8, 5, 10, 7, 1, 7]
0 голосов
/ 06 февраля 2019
import random

def get_random(n, exclude):
    my_set = set(range(n+1))
    my_set.difference_update(set(exclude))
    return random.choice(list(my_set))

def get_random2(n, exclude):
    nums = list(range(n+1))
    while True:
        num =  random.choice(nums)
        if num not in exclude:
            return num

list1 = [0,3,2,5,7,2,3,5,9,2]
list2 = [1,7,2,5,0,0,2,3,0,4]

# print list with numbers between 0 and 10 inclusive
print([get_random(10, nums) for nums in zip(list1, list2)])
print([get_random2(10, nums) for nums in zip(list1, list2)])
0 голосов
/ 06 февраля 2019

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

import random
random.seed(42)

list_1 = [0,3,2,5,7,2,3,5,9,2]
list_2 = [1,7,2,5,0,0,2,3,0,4]

n = 10
pool = set(range(n))

result = [random.sample(pool - set(t), 1)[0] for t in zip(list_1, list_2)]
print(result)

Вывод

[3, 0, 5, 3, 4, 4, 1, 1, 7, 0]

В качестве более быстрой альтернативы вы можете сделать:

result = [random.choice(list(pool - set(t))) for t in zip(list_1, list_2)]
...