2009-03-16 1 views
6

Есть ли лучший способ одновременного вставки и расширения списка? Вот уродливый пример того, как я это делаю сейчас. (Позволяет сказать, что я хочу, чтобы вставить «2.4» и «2.6» после элемента «2»):Одновременно вставка и расширение списка?

>>> a = ['1', '2', '3', '4'] 
>>> b = a[:a.index('2')+1] + ['2.4', '2.6'] + a[a.index('2'):] 
>>> b 
<<< ['1', '2', '2.4', '2.6', '3', '4'] 
+0

Вы пытаетесь сохранить список в отсортированном виде? Если да, то задан вопрос. –

+0

Незначительный кулачный комментарий, ['1', '2', '2.4', '2.6', '2', '3', '4'] имеет дубликат '2' – Drew

ответ

15
>>> a = ['1', '2', '3', '4'] 
>>> a 
['1', '2', '3', '4'] 
>>> i = a.index('2') + 1 # after the item '2' 
>>> a[i:i] = ['2.4', '2.6'] 
>>> a 
['1', '2', '2.4', '2.6', '3', '4'] 
>>> 
2

Я не совсем ясно, на что вы делаете; если вы хотите, чтобы добавить значения, и есть список остаются в порядке, это чище (и, вероятно, еще быстрее) просто сортировать все это:

a.extend(['2.4', '2.6']) 
a.sort() 
5

Вы можете легко вставить один элемент, используя list.insert(i, x), который определяет Python как s[i:i] = [x].

a = ['1', '2', '3', '4'] 
for elem in reversed(['2.4', '2.6']): 
    a.insert(a.index('2')+1, elem)) 

Если вы хотите, чтобы вставить список, вы можете сделать свою собственную функцию, которая опускает []:

def iextend(lst, i, x): 
    lst[i:i] = x 

a = ['1', '2', '3', '4'] 
iextend(a, a.index('2')+1, ['2.4', '2.6'] 
# a = ['1', '2', '2.4', '2.6', '3', '4'] 
2

Посмотрите на bisect module. Я думаю, он делает то, что вы хотите.

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