Я пытаюсь сделать, печатают все возможные результаты данного списка, и я задавался вопросом, как поместить значение в различные местоположения в списке. Например, если мой список был [A,B]
, Я хочу вставить X
в весь возможный индекс списка, таким образом, что это возвратило бы это [X,A,B]
, [A,X,B]
, [A,B,X]
.
Я думал об использовании range(len())
и для цикла, но не уверенный, как запустить.
Вы можете сделать это со следующим пониманием списка:
[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']]
Используйте 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')
Если l
- ваш список, а X
- ваше значение:
for i in range(len(l) + 1):
print l[:i] + [X] + l[i:]