Вы можете просто просматривать список и проверить, является ли для any
пунктов (i,j)
в списке, i
такими же, как b
в пункте (a,b)
вы хотите добавить. (По крайней мере, как я понял ваше состояние, но если условие немного отличается, это должно быть легко адаптироваться соответствующим образом.)
def cond_add(lst, item):
a, b = item
if not any(i == b for (i, j) in lst):
lst.append(item)
lst = [[1,2],[1,3],[3,4],[4,6]]
cond_add(lst, [6,1])
cond_add(lst, [6,5])
print(lst)
Если вы хотите добавить несколько элементов, он будет платить, чтобы создать set
из первые элементы, поэтому вы можете выполнять проверку в постоянное время для каждого отдельного элемента. (Вы можете сделать то же самое для добавления отдельных элементов, но вы должны обновить набор после каждого элемента.)
def cond_add_many(lst, items):
first = set(i for (i, j) in lst)
for (a,b) in items:
if b not in first:
lst.append((a,b))
first.add(a)
lst = [[1,2],[1,3],[3,4],[4,6]]
cond_add_many(lst, [[6,1], [6,5], [7,6]])
print(lst)
Затем, в обоих случаях, lst
является [[1, 2], [1, 3], [3, 4], [4, 6], (6, 5)]
Вы на самом деле имеете в виду, если '[b, j]' нет в списке? –
Просто переберите список и сравните с компонентами каждого элемента, или если производительность более важна, создайте наборы всех i и j и проверьте их. –
@tobias_k right, мы должны добавлять элементы только в том случае, если это второй индекс (в [6,1] он равен 1) не равен ни одному из первых индексов в списке –