Вставка значений в определенные местоположения в списке в Python

Я пытаюсь сделать, печатают все возможные результаты данного списка, и я задавался вопросом, как поместить значение в различные местоположения в списке. Например, если мой список был [A,B], Я хочу вставить X в весь возможный индекс списка, таким образом, что это возвратило бы это [X,A,B], [A,X,B], [A,B,X].

Я думал об использовании range(len()) и для цикла, но не уверенный, как запустить.

37
задан T Zengerink 28 June 2012 в 23:05
поделиться

3 ответа

Вы можете сделать это со следующим пониманием списка:

[mylist[i:] + [newelement] + mylist[:i] for i in xrange(len(mylist),-1,-1)]

В вашем примере:

>>> mylist=['A','B']
>>> newelement='X'
>>> [mylist[i:] + [newelement] + mylist[:i] for i in xrange(len(mylist),-1,-1)]
[['X', 'A', 'B'], ['B', 'X', 'A'], ['A', 'B', 'X']]
21
ответ дан 27 November 2019 в 04:13
поделиться

Используйте insert () , чтобы вставить элемент перед заданной позицией.

Например, с

arr = ['A','B','C']
arr.insert(0,'D')

arr становится ['D', 'A', 'B', 'C'] , потому что D вставляется перед элементом с индексом 0.

Теперь для

arr = ['A','B','C']
arr.insert(4,'D')

arr становится ['A', 'B', 'C', 'D'] , потому что D вставляется перед элементом в индекс 4 (который равен 1 за пределами конца массива).

Однако, если вы хотите сгенерировать все перестановки массива, есть способы сделать это, уже встроенные в Python. В пакете itertools есть генератор перестановок.

Вот пример кода:

import itertools
arr = ['A','B','C']
perms = itertools.permutations(arr)
for perm in perms:
    print perm

распечатает

('A', 'B', 'C')
('A', 'C', 'B')
('B', 'A', 'C')
('B', 'C', 'A')
('C', 'A', 'B')
('C', 'B', 'A')
86
ответ дан 27 November 2019 в 04:13
поделиться

Если l - ваш список, а X - ваше значение:

for i in range(len(l) + 1):
    print l[:i] + [X] + l[i:]
-1
ответ дан 27 November 2019 в 04:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: