Ответ 1
l = [('a', 1), ('b', 2), ('c', 3)]
k = 1
l_without_num = l[:k] + l[(k + 1):]
Это то, что вы хотите?
У меня есть список в 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 Я хочу получить по существу срез исходного списка, который исключает текущий элемент. похоже, должен быть более простой способ сделать это.
Благодарю вас за помощь.
l = [('a', 1), ('b', 2), ('c', 3)]
k = 1
l_without_num = l[:k] + l[(k + 1):]
Это то, что вы хотите?
Это поможет, если вы объясните, как вы хотели его использовать. Но вы можете сделать то же самое со списком.
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.
l=[('a', 1), ('b', 2), ('c', 3)]
k=1
l_without_num=l[:] # or list(l) if you prefer
l_without_num.pop(k)
new = [l[i] for i in range(len(l)) if i != k]
#!/bin/bash
`python -c "'\n'.join(mylist[:])" 2>NULL | sed '/mybadelement/d'`
лол
Вероятно, не самый эффективный, но функциональный программист во мне, вероятно, напишет это.
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)
Я не думаю, что это правильно, но это не так.: -)
Используя разностный оператор на множествах:
list(set(l).difference([l[k]])
l=[('a', 1), ('b', 2), ('c', 3)]
list(set(l).difference([l[1]]))
[('a', 1), ('c', 3)]