Уникальный список в питоне - PullRequest
0 голосов
/ 21 ноября 2018

Я довольно новичок в кодировании.Я пытаюсь создать 2 уникальных списка, чтобы l2 никогда не имел одинаковое значение в одном и том же индексе l1.По сути, оператор if работает хорошо, чтобы проверить, не находится ли a (случайное значение) в l2, но не работает, когда нужно проверить, является ли a тем же значением, что и l1 для того же индекса.Затем я масштабирую этот код, чтобы создать игру судоку с 9 списками, каждый из которых состоит из 9 элементов.

l1 = [1, 2, 3, 4]

l2 = []
i = 0
while len(l2) < 4:
    a = random.randrange(1, 5)

    if a not in l2 or not l1[i]:
        l2.append(a)
        i += 1

print(l1, l2)

Ответы [ 4 ]

0 голосов
/ 21 ноября 2018

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

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

l1 = [1, 2, 3, 4]

l2 = []

while len(l2) < 4:
    a = random.randrange(1, 5)
    length_l2 = 
    if a not in l2 and a != l1[len(l2)]:
        l2.append(a)


print(l1, l2)

Вместо того, чтобы использовать I, вы можете просто использовать длину l2 и затем проверить это место в l1, потому что, если длина l2 составляет 3 элемента [2, 1, 4], и вы хотите проверить, равен ли элемент элементу, находящемуся на 4-м месте l1, индекс будет равен 3, так как индексы идут в 0, 1, 2, 3, поэтому длина работает идеально.

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

0 голосов
/ 21 ноября 2018

Вы можете попробовать этот метод тоже.

k = [1,2,3,4,5]
l= [9,8,7,6,5]
m = set(k).intersection(set(l))

Это немного быстро.

0 голосов
/ 21 ноября 2018

Еще один способ сделать это - использовать random.shuffle для продолжения перемешивания l2, в то время как any элементов с одинаковым индексом равны:

import random

l1 = list(range(1, 5))
l2 = list(range(1, 5))
random.shuffle(l1)

while any(x == y for x, y in zip(l1, l2)):
    random.shuffle(l2)

print(l1)
print(l2)

Выход

[1, 4, 3, 2]
[2, 3, 4, 1]
0 голосов
/ 21 ноября 2018

Добро пожаловать в StackOverflow!В настоящее время вы делаете проверку неправильно.if a not in l2 or not l1[i] проверяет 2 вещи:

  1. l2 не содержит a ИЛИ
  2. l1[i] не равно 0 (поскольку l1[i] проверяется как boolean и not 0 = 1, то есть true)

Вы должны использовать эту проверку вместо if a not in l2 and a != l1[i], которая проверяет:

  1. l2 не содержит a И
  2. l1[i] не равно значению a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...