java 洗牌 交换,洗牌对象列表

回答(23)

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

当使用'foo'调用时,'print func(foo)'将打印'func'的返回值 . 'shuffle'但是返回类型为None,因为列表将被修改到位,因此它不会打印任何内容 . 解决方法:

# shuffle the list in place

random.shuffle(b)

# print it

print(b)

如果您更喜欢函数式编程风格,您可能需要创建以下包装函数:

def myshuffle(ls):

random.shuffle(ls)

return ls

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

#!/usr/bin/python3

import random

s=list(range(5))

random.shuffle(s) # << shuffle before print or assignment

print(s)

# print: [2, 4, 1, 3, 0]

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

你可以这样做:

>>> A = ['r','a','n','d','o','m']

>>> B = [1,2,3,4,5,6]

>>> import random

>>> random.sample(A+B, len(A+B))

[3, 'r', 4, 'n', 6, 5, 'm', 2, 1, 'a', 'o', 'd']

如果要返回两个列表,则将此长列表拆分为两个 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

import random

class a:

foo = "bar"

a1 = a()

a2 = a()

a3 = a()

a4 = a()

b = [a1,a2,a3,a4]

random.shuffle(b)

print(b)

shuffle 已就位,所以不要打印结果,这是 None ,而是列表 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

如果您恰好使用numpy(非常受科学和金融应用程序欢迎),您可以节省自己的导入 .

import numpy as np

np.random.shuffle(b)

print(b)

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

random.shuffle应该工作 . 这是一个示例,其中对象是列表:

from random import shuffle

x = [[i] for i in range(10)]

shuffle(x)

# print x gives [[9], [2], [7], [0], [4], [5], [3], [1], [8], [6]]

# of course your results will vary

请注意,shuffle有效 in place ,并返回None .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

def shuffle(_list):

if not _list == []:

import random

list2 = []

while _list != []:

card = random.choice(_list)

_list.remove(card)

list2.append(card)

while list2 != []:

card1 = list2[0]

list2.remove(card1)

_list.append(card1)

return _list

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

当你了解到就地改组就是问题所在 . 我也经常遇到问题,而且似乎也经常忘记如何复制列表 . 使用 sample(a, len(a)) 是解决方案,使用 len(a) 作为样本大小 . 有关Python文档,请参阅https://docs.python.org/3.6/library/random.html#random.sample .

这是一个使用 random.sample() 的简单版本,它将混洗后的结果作为新列表返回 .

import random

a = range(5)

b = random.sample(a, len(a))

print a, b, "two list same:", a == b

# print: [0, 1, 2, 3, 4] [2, 1, 3, 4, 0] two list same: False

# The function sample allows no duplicates.

# Result can be smaller but not larger than the input.

a = range(555)

b = random.sample(a, len(a))

print "no duplicates:", a == list(set(b))

try:

random.sample(a, len(a) + 1)

except ValueError as e:

print "Nope!", e

# print: no duplicates: True

# print: Nope! sample larger than population

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

我也花了一些时间才能做到这一点 . 但是shuffle的文档很清楚:

shuffle list x到位;返回无 .

所以你不应该 print random.shuffle(b) . 而是 random.shuffle(b) 然后 print b .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

import random

class a:

foo = "bar"

a1 = a()

a2 = a()

b = [a1.foo,a2.foo]

random.shuffle(b)

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

在某些情况下使用numpy数组时,使用 random.shuffle 在数组中创建了重复数据 .

另一种方法是使用 numpy.random.shuffle . 如果您已经使用numpy,这是通用 random.shuffle 的首选方法 .

Example

>>> import numpy as np

>>> import random

使用 random.shuffle :

>>> foo = np.array([[1,2,3],[4,5,6],[7,8,9]])

>>> foo

array([[1, 2, 3],

[4, 5, 6],

[7, 8, 9]])

>>> random.shuffle(foo)

>>> foo

array([[1, 2, 3],

[1, 2, 3],

[4, 5, 6]])

使用 numpy.random.shuffle :

>>> foo = np.array([[1,2,3],[4,5,6],[7,8,9]])

>>> foo

array([[1, 2, 3],

[4, 5, 6],

[7, 8, 9]])

>>> np.random.shuffle(foo)

>>> foo

array([[1, 2, 3],

[7, 8, 9],

[4, 5, 6]])

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

如果您有多个列表,则可能需要先定义排列(将列表重新排列/重新排列列表中的项目的方式),然后将其应用于所有列表:

import random

perm = list(range(len(list_one)))

random.shuffle(perm)

list_one = [list_one[index] for index in perm]

list_two = [list_two[index] for index in perm]

Numpy / Scipy

如果您的列表是numpy数组,则更简单:

import numpy as np

perm = np.random.permutation(len(list_one))

list_one = list_one[perm]

list_two = list_two[perm]

mpu

import mpu

# Necessary if you want consistent results

import random

random.seed(8)

# Define example lists

list_one = [1,2,3]

list_two = ['a', 'b', 'c']

# Call the function

list_one, list_two = mpu.consistent_shuffle(list_one, list_two)

请注意 mpu.consistent_shuffle 采用任意数量的参数 . 因此,您也可以随机播放三个或更多列表 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

from random import random

my_list = range(10)

shuffled_list = sorted(my_list, key=lambda x: random())

对于您想要交换排序功能的某些应用程序,此替代方法可能很有用 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

确保你没有命名你的源文件random.py,并且你的工作目录中没有一个名为random.pyc的文件..要么你的程序可能会尝试导入你的本地random.py文件而不是pythons随机模块 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

它工作正常 . 我在这里尝试使用函数作为列表对象:

from random import shuffle

def foo1():

print "foo1",

def foo2():

print "foo2",

def foo3():

print "foo3",

A=[foo1,foo2,foo3]

for x in A:

x()

print "\r"

shuffle(A)

for y in A:

y()

打印出:foo1 foo2 foo3 foo2 foo3 foo1(最后一行中的foos有一个随机顺序)

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

>>> import random

>>> a = ['hi','world','cat','dog']

>>> random.shuffle(a,random.random)

>>> a

['hi', 'cat', 'dog', 'world']

这对我来说可以 . 确保设置随机方法 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

可以定义一个名为 shuffled 的函数(与 sort vs sorted 相同)

def shuffled(x):

import random

y = x[:]

random.shuffle(y)

return y

x = shuffled([1, 2, 3, 4])

print x

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

你可以构建一个函数,它将列表作为参数并返回列表的混乱版本:

from random import *

def listshuffler(inputlist):

for i in range(len(inputlist)):

swap = randint(0,len(inputlist)-1)

temp = inputlist[swap]

inputlist[swap] = inputlist[i]

inputlist[i] = temp

return inputlist

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

计划:写出洗牌而不依赖于库来进行繁重的工作 . 示例:从元素0开始,从头开始查看列表;为它找到一个新的随机位置,比如说6,将0的值放在6中,将6的值放在0中 . 转到元素1并重复此过程,依此类推到列表的其余部分

import random

iteration = random.randint(2, 100)

temp_var = 0

while iteration > 0:

for i in range(1, len(my_list)): # have to use range with len()

for j in range(1, len(my_list) - i):

# Using temp_var as my place holder so I don't lose values

temp_var = my_list[i]

my_list[i] = my_list[j]

my_list[j] = temp_var

iteration -= 1

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

你可以使用shuffle或者样品 . 两者都来自随机模块 .

import random

def shuffle(arr1):

n=len(arr1)

b=random.sample(arr1,n)

return b

要么

import random

def shuffle(arr1):

random.shuffle(arr1)

return arr1

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

""" to shuffle random, set random= True """

def shuffle(x,random=False):

shuffled = []

ma = x

if random == True:

rando = [ma[i] for i in np.random.randint(0,len(ma),len(ma))]

return rando

if random == False:

for i in range(len(ma)):

ave = len(ma)//3

if i < ave:

shuffled.append(ma[i+ave])

else:

shuffled.append(ma[i-ave])

return shuffled

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

The shuffling process is "with replacement" ,所以每个项目的发生可能会改变!至少当列表中的项目也列出时 .

例如 . ,

ml = [[0], [1]] * 10

后,

random.shuffle(ml)

[0]的数量可以是9或8,但不是10 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

对于单行,请使用 random.sample(list_to_be_shuffled, length_of_the_list) 作为示例:

import random

random.sample(list(range(10)), 10)

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

以下是对提供的参考资料的总结,按照要求结构化多个要点分条输出: 4G/5G无线网络优化与网规案例分析: NSA站点下终端掉4G问题:部分用户反馈NSA终端频繁掉4G,主要因终端主动发起SCGfail导致。分析显示,在信号较好的环境下,终端可能因节能、过热保护等原因主动释放连接。解决方案建议终端侧进行分析处理,尝试关闭节电开关等。 RSSI算法识别天馈遮挡:通过计算RSSI平均值及差值识别天馈遮挡,差值大于3dB则认定有遮挡。不同设备分组规则不同,如64T和32T。此方法可有效帮助现场人员识别因环境变化引起的网络问题。 5G 160M组网小区CA不生效:某5G站点开启100M+60M CA功能后,测试发现UE无法正常使用CA功能。问题原因在于CA频点集标识配置错误,修正后测试正常。 5G网络优化与策略: CCE映射方式优化:针对诺基亚站点覆盖农村区域,通过优化CCE资源映射方式(交织、非交织),提升RRC连接建立成功率和无线接通率。非交织方式相比交织方式有显著提升。 5G AAU两扇区组网:与三扇区组网相比,AAU两扇区组网在RSRP、SINR、下载速率和上传速率上表现不同,需根据具体场景选择适合的组网方式。 5G语音解决方案:包括沿用4G语音解决方案、EPS Fallback方案和VoNR方案。不同方案适用于不同的5G组网策略,如NSA和SA,并影响语音连续性和网络覆盖。 4G网络优化与资源利用: 4G室分设备利旧:面对4G网络投资压减与资源需求矛盾,提出利旧多维度调优策略,包括资源整合、统筹调配既有资源,以满足新增需求和提质增效。 宏站RRU设备1托N射灯:针对5G深度覆盖需求,研究使用宏站AAU结合1托N射灯方案,快速便捷地开通5G站点,提升深度覆盖能力。 基站与流程管理: 爱立信LTE基站邻区添加流程:未提供具体内容,但通常涉及邻区规划、参数配置、测试验证等步骤,以确保基站间顺畅切换和覆盖连续性。 网络规划与策略: 新高铁跨海大桥覆盖方案试点:虽未提供详细内容,但可推测涉及高铁跨海大桥区域的4G/5G网络覆盖规划,需考虑信号穿透、移动性管理、网络容量等因素。 总结: 提供的参考资料涵盖了4G/5G无线网络优化、网规案例分析、网络优化策略、资源利用、基站管理等多个方面。 通过具体案例分析,展示了无线网络优化中的常见问题及解决方案,如NSA终端掉4G、RSSI识别天馈遮挡、CA不生效等。 强调了5G网络优化与策略的重要性,包括CCE映射方式优化、5G语音解决方案、AAU扇区组网选择等。 提出了4G网络优化与资源利用的策略,如室分设备利旧、宏站RRU设备1托N射灯等。 基站与流程管理方面,提到了爱立信LTE基站邻区添加流程,但未给出具体细节。 新高铁跨海大桥覆盖方案试点展示了特殊场景下的网络规划需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值