Подтвердить что ты не робот

Получение списка без элемента k'th эффективно и без разрушения

У меня есть список в python, и я бы хотел прокрутить его и выборочно построить список, содержащий все элементы, кроме текущего элемента k'th. один способ я могу это сделать:

l = [('a', 1), ('b', 2), ('c', 3)]
for num, elt in enumerate(l):
  # construct list without current element
  l_without_num = copy.deepcopy(l)
  l_without_num.remove(elt)

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

Благодарю вас за помощь.

4b9b3361

Ответ 1

l = [('a', 1), ('b', 2), ('c', 3)]
k = 1
l_without_num = l[:k] + l[(k + 1):]

Это то, что вы хотите?

Ответ 2

Это поможет, если вы объясните, как вы хотели его использовать. Но вы можете сделать то же самое со списком.

l = [('a', 1), ('b', 2), ('c', 3)]
k = 1
l_without_num = [elt for num, elt in enumerate(l) if not num == k]

Это также более эффективная память для повторения, если вам не нужно хранить ее в l_without_num.

Ответ 3

l=[('a', 1), ('b', 2), ('c', 3)]
k=1
l_without_num=l[:]   # or list(l) if you prefer
l_without_num.pop(k)

Ответ 4

new = [l[i] for i in range(len(l)) if i != k]

Ответ 5

#!/bin/bash
`python -c "'\n'.join(mylist[:])" 2>NULL | sed '/mybadelement/d'`

лол

Ответ 6

Вероятно, не самый эффективный, но функциональный программист во мне, вероятно, напишет это.

import operator
from itertools import *
def inits(list):
    for i in range(0, len(list)):
        yield list[:i]
def tails(list):
    for i in range(0, len(list)):
        yield list[i+1:]
def withouts(list):
    return imap(operator.add, inits(list), tails(list))

for elt, without in izip(l, withouts(l)):
    ...

import functools, operator
for elt in l:
    without = filter(functools.partial(operator.ne, elt), l)

Я не думаю, что это правильно, но это не так.: -)

Ответ 7

Используя разностный оператор на множествах:

list(set(l).difference([l[k]])

l=[('a', 1), ('b', 2), ('c', 3)]
list(set(l).difference([l[1]]))
[('a', 1), ('c', 3)]