Замена подписок на другой подписчик в python

Я хочу заменить вспомогательный список из списка a , с другим под-списком. Что-то вроде этого:

 a=[1,3,5,10,13] 

Допустим, я хочу взять подсписку вроде:

 a_sub=[3,5,10] 

и замените его на

 b_sub=[9,7] 

поэтому окончательный результат будет

 print(a) >>> [1,9,7,13] 

Какие-либо предложения?

4 Solutions collect form web for “Замена подписок на другой подписчик в python”

 In [39]: a=[1,3,5,10,13] In [40]: sub_list_start = 1 In [41]: sub_list_end = 3 In [42]: a[sub_list_start : sub_list_end+1] = [9,7] In [43]: a Out[43]: [1, 9, 7, 13] 

надеюсь, это поможет

Вы можете сделать это красиво с нарезкой списка:

 >>> a=[1, 3, 5, 10, 13] >>> a[1:4] = [9, 7] >>> a [1, 9, 7, 13] 

Итак, как мы получаем индексы здесь?

 def find_sublists(seq, sublist): length = len(sublist) for index, value in enumerate(seq): if value == sublist[0] and seq[index:index+length] == sublist: yield index, index+length 

Поэтому мы можем использовать это для замены, не зная положения подсписчика:

 import itertools def replace_sublist(seq, target, replacement, maxreplace=None): sublists = find_sublists(seq, target) if maxreplace: sublists = itertools.islice(sublists, maxreplace) for start, end in sublists: seq[start:end] = replacement 

Что мы можем использовать красиво:

 >>> a=[1, 3, 5, 10, 13] >>> replace_sublist(a, [3, 5, 10], [9, 7]) >>> a [1, 9, 7, 13] 

Вам нужно взять срез от start_index до end_index + 1 и назначить его подписок.

Точно так же, как вы можете сделать: – a[0] = 5 , вы также можете назначить подсписку вашему slice : – a[0:5] -> Создает срез из index 0 to index 4

Все, что вам нужно, это выяснить position sublist вы хотите заменить.

 >>> a=[1,3,5,10,13] >>> b_sub = [9, 7] >>> a[1:4] = [9,7] # Substitute `slice` from 1 to 3 with the given list >>> a [1, 9, 7, 13] >>> 

Как вы можете видеть, подстрочный подзадачник не должен иметь одинаковую длину substituting подписок.

Фактически вы можете заменить 4 списка длины с 2 списком длин и наоборот.

Вот еще один способ сделать это. Этот метод работает, если нам нужно заменить несколько подписок:

 a=[1,3,5,10,13] a_sub=[3,5,10] b_sub=[9,7] def replace_sub(a, a_sub, b_sub): a_str = ',' + ','.join(map(str, a)) + ',' a_sub_str = ',' + ','.join(map(str, a_sub)) + ',' b_sub_str = ',' + ','.join(map(str, b_sub)) +',' replaced_str = a_str.replace(a_sub_str, b_sub_str)[1 : -1] return map(int, replaced_str.split(',')) 

Результат:

 >>> replace_sub(a, a_sub, b_sub) [1, 9, 7, 13] >>> replace_sub([10, 13, 4], [3, 4], [7]) [10, 13, 4] #[3,4] is not in the list so nothing happens 

Замените несколько подписок:

 >>> a=[1,3,5,10,13,3,5,10] >>> a_sub=[3,5,10] >>> b_sub=[9,7] >>> replace_sub(a, a_sub, b_sub) [1, 9, 7, 13, 9, 7] 
  • Когда я назначаю список переменной, почему Pycharm дает мне подсказку, что «это создание списка может быть переписано как листинг списка»?
  • Python :: "IndexError: индекс индекса вне диапазона"
  • Вызывать функцию int () для каждого элемента списка?
  • TypeError: объект 'list' не вызывается в python
  • Как создать список 1d с .txt с \ n?
  • сравнение содержания 2 списков списков
  • Используя понимание списков в Python, чтобы сделать что-то похожее на zip ()?
  • Первый индекс списка Python больше, чем x?
  • Перечислить преобразование массива
  • Удалить элемент списка Python
  • Эффективный способ создать список или добавить к нему, если он уже существует?
  • Python - лучший язык программирования в мире.