#算法題
#有兩個數組, 要從數組中隨機獲取數據3個數據, 3個數據不能來自同一個數組
#請問如何寫?
我们把计算机的内存想象成一大片格子,每个格子都只能存放1、0中的一个数,这样一个单独的格子就叫“位”。多个位连在一起就组成字节,一般计算机上一个字节由八个位组成。
单个格子能存储的信息非常有限,只有0或1。然而当我们把多个格子,也就是位连在一起并且赋予这些位某种意义的时候,这些位就能表示大量信息。比如我们考虑八个连在一起的位,将这些位称作长度为8的位向量 = ,就可以表示数集{7,6,...0}的任何子集E。当时,令,利用这种编码方式,就可以用位向量[0,0,0,1,0,1,0,0]表示数集{2,4}。
问题回答:
从一个数组中随机获取一个元素,可以采用以下方法:
import random
arr = [1, 2, 3, 4, 5]
random_elem = random.choice(arr)
print(random_elem)
其中,random模块中的choice()
函数可以从非空序列中随机地返回一个元素。该方法的时间复杂度为O(1)。
如果要对该方法进行封装,可以这样写:
import random
def get_random_elem(arr):
if not arr:
return None
return random.choice(arr)
其中,not arr
表示判断arr是否为空序列,如果为空,直接返回None。该方法的时间复杂度也为O(1)。
需要注意的是,如果是需要进行多次随机操作,建议先将原数组打乱,然后再进行随机操作,这样可以保证获取的元素随机性更高。打乱数组可以使用random模块中的shuffle()
函数:
import random
def get_random_elem(arr):
if not arr:
return None
random.shuffle(arr)
return arr[0]
其中,shuffle()
函数可以将序列x中元素顺序打乱。