получение списка без 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)

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

спасибо за Вашу справку.

24
задан 26 January 2010 в 20:36
поделиться

5 ответов

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

Ты этого хочешь?

61
ответ дан 28 November 2019 в 22:25
поделиться
l=[('a', 1), ('b', 2), ('c', 3)]
k=1
l_without_num=l[:]   # or list(l) if you prefer
l_without_num.pop(k)
2
ответ дан 28 November 2019 в 22:25
поделиться
new = [l[i] for i in range(len(l)) if i != k]
1
ответ дан 28 November 2019 в 22:25
поделиться

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

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)

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

0
ответ дан 28 November 2019 в 22:25
поделиться

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

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.

9
ответ дан 28 November 2019 в 22:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: