Skip to main content
 首页 » 编程设计

python之如何在 python 中正确地打乱列表

2025年05月04日15mfryf

我有这段代码可以打乱列表。我首先将它分成两个列表,因为我有一个交错函数,可以交错 2 个列表:

def shuffle(xs, n=1): 
    il=list() 
    if len(xs)%2==0: 
        stop=int(len(xs)//2) 
        a=xs[:stop] 
        b=xs[stop:] 
        print(a) 
        print(b) 
    else: 
        stop=int(len(xs)//2) 
        a=xs[:stop] 
        b=xs[stop:] 
        print(a) 
        print(b) 
    if n>0: 
        for i in range(n): 
            shuffle=interleave(a,b) 
    else: 
        return  
    return shuffle 

当我测试它时:

>>> shuffle([1,2,3,4,5,6,7],1) 
[1, 2, 3] 
[4, 5, 6, 7] 
1 
[7] 
[7, 4] 
[1, 4, 2, 5, 3, 6, 7, 4] 

列表中的 4 两次是什么,为什么打印 1, [7], 7,4]??

编辑:

def interleave(xs,ys): 
    a=xs 
    b=ys 
    minlength=[len(a),len(b)] 
    extralist= list() 
    interleave= list() 
    for i in range((minval(minlength))): 
        pair=a[i],b[i] 
        interleave.append(pair) 
        flat=flatten(interleave) 
        c=a+b 
    if len(b)>len(a): 
        remainder=len(b)-len(a) 
        for j in range(remainder,-1,-1): 
            extra=b[-j] 
            extralist.append(extra) 
    if len(a)>len(b): 
        remainder=len(a)-len(b) 
        for j in range(remainder,-1,-1): 
            extra=a[-j] 
            extralist.append(extra) 
    del extralist[-1] 
    final=flat+extralist 
    return final 

请您参考如下方法:

为什么不直接使用标准库呢?

>>> from random import shuffle 
>>> l = list(range(1,20))                                                                                                                                                                                                                        
>>> l 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] 
>>> shuffle(l)                                                                                                                                                                                                                                   
>>> l 
[17, 15, 9, 13, 19, 7, 10, 18, 5, 1, 12, 3, 2, 16, 4, 14, 8, 6, 11] 
>>>