我正在嘗試打印給定列表的所有可能結果,並且想知道如何將值放入列表中的各個位置。例如,如果我的列表是[A,B]
,我想要將X
插入列表的所有可能索引中,以便它將返回此[X,A,B]
,[A,X,B]
,[A,B,X]
。將值插入Python中列表中的特定位置
我正在考慮使用range(len())
和for循環,但不知道如何開始。
我正在嘗試打印給定列表的所有可能結果,並且想知道如何將值放入列表中的各個位置。例如,如果我的列表是[A,B]
,我想要將X
插入列表的所有可能索引中,以便它將返回此[X,A,B]
,[A,X,B]
,[A,B,X]
。將值插入Python中列表中的特定位置
我正在考慮使用range(len())
和for循環,但不知道如何開始。
你可以用下面的列表中理解這樣做:
[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']]
xrange和range之間有區別嗎?並可以這樣做: 我在xrange(len(mylist), - 1,-1): mylist [i:] + [newelement] + mylist [:i] 因爲這是作業和I從來沒有學過如何編寫它的方式 – Dan 2010-02-07 21:12:40
範圍一次生成序列中的每個數字,並將這些數字返回到列表中。 xrange在您需要的範圍*中生成每個數字*。因此,xrange使用較少的內存(如果序列非常大,則少很多)。所以除非你真的需要所有的數字,xrange可以更有效率。 你建議的代碼也可以做到這一點。 (儘管你可能想對你在for循環體中構造的列表做些什麼)。 – 2010-02-07 22:56:37
如果l
是你的清單,X
是你的價值:
for i in range(len(l) + 1):
print l[:i] + [X] + l[i:]
刪除呼叫可能會刪除X – 2012-10-11 22:02:49
的另一個實例良好的呼叫,謝謝!現在解決。 – 2012-10-11 23:44:26
使用insert()在給定位置之前插入一個元素。
例如,對於
arr = ['A','B','C']
arr.insert(0,'D')
ARR變爲[ 'd', 'A', 'B', 'C'],因爲 'd' 爲索引爲0
元件之前插入現在,因爲 'd' 是在索引4(其爲1以外的端部的元件之前插入
arr = ['A','B','C']
arr.insert(4,'D')
ARR變爲[ 'A', 'B', 'C', 'd']該陣列)。然而,如果你想要生成一個數組的所有排列,有一些方法可以在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')
如果要插入一個列表的列表,你可以這樣做:
>>> a = [1,2,3,4,5]
>>> for x in reversed(['a','b','c']): a.insert(2,x)
>>> a
[1, 2, 'a', 'b', 'c', 3, 4, 5]
即將從JavaScript,這是我曾經通過Array.prototype.splice()「內置」的東西,所以我做了一個Python函數tha噸不相同:
def list_splice(target, start, delete_count=None, *items):
"""Remove existing elements and/or add new elements to a list.
target the target list (will be changed)
start index of starting position
delete_count number of items to remove (default: len(target) - start)
*items items to insert at start index
Returns a new list of removed items (or an empty list)
"""
if delete_count == None:
delete_count = len(target) - start
# store removed range in a separate list and replace with *items
total = start + delete_count
removed = target[start:total]
target[start:total] = items
return removed
簡單的是使用表[I:]
a = [1,2, 3, 4]
a[2:2] = [10]
打印一簽插入
print a
[1, 2, 10, 3, 4]
不回答這個問題,你只是給出一個如何在列表中給定位置插入的方法。當在所有可能的位置插入一個值時,問題以所有結果列表的形式詢問結果。 – Olivier 2017-04-05 14:53:01
長度的 「給定的列表的所有可能的結果」 3會給你6個排列。 – bernie 2010-02-07 20:56:51
我知道,我只是沒有寫出全部的 – Dan 2010-02-07 21:18:13