python列表中的元素是无序的_在Python中无序排列列表中的特定元素,但不是每个元素...

我们基本上是对索引进行洗牌,而不是对值进行洗牌:import random

def shuffle_except(lst, keep):

# keep should be a list of the indexes that we want to keep fixed

# can also be a range or a sum of range

# keep = range(0, 2) + range(5, 8)

keep = set(keep)

start_indexes = [i for i in xrange(len(lst)) if i not in keep]

end_indexes = [i for i in xrange(len(lst)) if i not in keep]

# we shuffle end indexes

random.shuffle(end_indexes)

# for each element in start_indexes, we move the corresponding element of lst

# to its counterpart in end_indexes

for i in xrange(len(start_indexes)):

start = start_indexes[i]

end = end_indexes[i]

lst[start], lst[end] = lst[end], lst[start]

a = range(20)

print a

print a[1], a[5], a[10], a[15]

shuffle_except(a, {1, 5, 10, 15})

print a

print a[1], a[5], a[10], a[15]

印刷品:

^{pr2}$

如您所见,除了我们指定的元素外,所有元素现在都被无序排列。在

现在,如果您还想分组多个洗牌,下面是一个示例:multi_list = [range(10) for _ in xrange(5)]

keep = {0, 3, 5}

for lst in multi_list:

shuffle_except(lst, keep)

print multi_list

结果如下:[

[0, 6, 2, 3, 4, 5, 1, 7, 8, 9],

[0, 4, 2, 3, 1, 5, 7, 9, 6, 8],

[0, 1, 4, 3, 2, 5, 8, 6, 7, 9],

[0, 2, 7, 3, 1, 5, 9, 4, 6, 8],

[0, 6, 4, 3, 1, 5, 2, 9, 7, 8]

]

同样,您可以看到列0、3和5始终具有与原始列表中相同的值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值