2013-07-16 3 views
-1

В python, я хочу удалить один элемент из списка, а затем слить этот список на новый. Могу ли я использовать методы, чтобы это произошло в одной строке?удалить список и объединить в одной строке

Например:

a = [1,2,3,4] 
# I want to remove 3 and add [10,11] 
a.remove(3) #it doesn't return a, so I can't do this in one line 
a += [10,11] 
+13

Есть проблема в выполнении двух различных операций на двух отдельных линии? –

+0

Да, я просто хочу передать его функции в качестве входного параметра, и было бы здорово не писать строку только для такой простой операции :) –

+0

Может ли быть несколько '3' s (например) в вашем список? – arshajii

ответ

11

Используйте список понимание и конкатенацию:

a = [i for i in a if i != 3] + [10, 11] 

Это устранило бы множественные копии 3 в списке. Если вы хотите, чтобы удалить появление 3 в первого даже если есть несколько копий, вы должны придерживаться нарезки:

a = a[:a.index(3)] + a[a.index(3) + 1:] + [10, 11] 

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

0

Вы могли бы разделить массив без позиции, которую вы хотите удалить, и затем сцепить хвост:

a = [1,2,3,4] 
a = a[:2]+a[3:]+[10,11] 

Таким образом, вы можете удалить одну позицию в одной строке.

1

Вы можете использовать, как это,

>>>print filter(lambda x: x is not 3, [1,2,3,4]) + [10,11] 
[1, 2, 4, 10, 11] 
0

Альтернатива:

a = [1,2,3,4] 
new = (lambda b=iter(a): list(iter(b.next, 3)) + list(b) + [10, 11])() 
# [1, 2, 4, 10, 11] 

Это некрасиво - но удаляет индекс поиска в

+0

Спасибо. Это немного нечитаемо, но: D –

+2

@RickyRobinson Ты тот, кто хочет однострочный - это часть и посылка, я боюсь;) –

Смежные вопросы