Скажем, у меня есть список кортежей в Python, например, так (с использованием трех-кортежей в примере, но хотелось бы, чтобы это работало для любого размера кортежа):Как удалить n-кортежи из списка, где каждый элемент в n-кортежах идентичен?
myList = [('a','b','c'),
('a','a','a'),
('b','b','b'),
('d','e','f')
]
Я хочу, чтобы удалить какой-либо n-кортеж, где каждый элемент n-кортежа один и тот же. В приведенном выше примере я хотел бы удалить кортежи ('a','a','a')
и ('b','b','b')
, потому что каждый из элементов в этих кортежах одинаковый.
Я написал цикл вложенных циклов, который делает это, но это кажется действительно неэффективным/не очень Pythonic, чтобы сделать это таким образом. Любые идеи о том, как сделать это проще и эффективнее?
def tuple_removal(aList):
elements = len(aList) # number of elements in the list
tuple_size = len(aList[0]) # size of the tuple
for i in reversed(range(elements)):
same_element_count = 1 # initialize counter to 1
for j in range(tuple_size-1):
# add one to counter if the jth element is equal to the j+1 element
same_element_count += aList[i][j] == aList[i][j+1]
if same_element_count == tuple_size:
# remove the tuple at the ith index if the count of elements that are the same
# is equal to the size of the tuple
del aList[i]
return(aList)
myNewList = tuple_removal(myList)
myNewList
# Output
myNewList = [('a','b','c'),
('d','e','f')
]
Я протестировал все ответы здесь, и я считаю, что ваш самый быстрый ;-) +1 –
Спасибо! Я возьму слово @leaf за это на скорости. 13 строк кода сокращены до 1. Это здорово. (И спасибо за все остальные ответы тоже). – user1895076