Одновременно вставлять и расширять список? - PullRequest
6 голосов
/ 17 марта 2009

Есть ли лучший способ одновременно вставлять и расширять список? Вот ужасный пример того, как я сейчас это делаю. (допустим, я хочу вставить '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']

Ответы [ 4 ]

15 голосов
/ 17 марта 2009
>>> 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']
>>>
5 голосов
/ 17 марта 2009

Вы можете легко вставить один элемент, используя 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 голосов
/ 17 марта 2009

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

2 голосов
/ 17 марта 2009

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

a.extend(['2.4', '2.6'])
a.sort()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...