2010-02-07 87 views
29

我正在尝试打印给定列表的所有可能结果,并且想知道如何将值放入列表中的各个位置。例如,如果我的列表是[A,B],我想要将X插入列表的所有可能索引中,以便它将返回此[X,A,B],[A,X,B],[A,B,X]将值插入Python中列表中的特定位置

我正在考虑使用range(len())和for循环,但不知道如何开始。

+0

长度的 “给定的列表的所有可能的结果” 3会给你6个排列。 – bernie 2010-02-07 20:56:51

+0

我知道,我只是没有写出全部的 – Dan 2010-02-07 21:18:13

回答

19

你可以用下面的列表中理解这样做:

[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']] 
+0

xrange和range之间有区别吗?并可以这样做: 我在xrange(len(mylist), - 1,-1): mylist [i:] + [newelement] + mylist [:i] 因为这是作业和I从来没有学过如何编写它的方式 – Dan 2010-02-07 21:12:40

+2

范围一次生成序列中的每个数字,并将这些数字返回到列表中。 xrange在您需要的范围*中生成每个数字*。因此,xrange使用较少的内存(如果序列非常大,则少很多)。所以除非你真的需要所有的数字,xrange可以更有效率。 你建议的代码也可以做到这一点。 (尽管你可能想对你在for循环体中构造的列表做些什么)。 – 2010-02-07 22:56:37

-1

如果l是你的清单,X是你的价值:

for i in range(len(l) + 1): 
    print l[:i] + [X] + l[i:] 
+0

删除呼叫可能会删除X – 2012-10-11 22:02:49

+0

的另一个实例良好的呼叫,谢谢!现在解决。 – 2012-10-11 23:44:26

67

使用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') 
3

如果要插入一个列表的列表,你可以这样做:

>>> 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] 
0

即将从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 
-1

简单的是使用表[I:]

a = [1,2, 3, 4] 
    a[2:2] = [10] 

打印一签插入

print a 
    [1, 2, 10, 3, 4] 
+1

不回答这个问题,你只是给出一个如何在列表中给定位置插入的方法。当在所有可能的位置插入一个值时,问题以所有结果列表的形式询问结果。 – Olivier 2017-04-05 14:53:01

相关问题