如何从均匀分布的列表中提取指定数量的元素?
How could a specified number of elements be extracted from a list with an even distribution?
解决方案 展示了如何从均匀分布的列表中提取一定比例的元素。如何从均匀分布的列表中提取指定数量的元素?
一种方法是使用递归函数。这让我写起来更快,但我猜不是很 pythonic。无论如何,它完成了工作:
>>> def select_elements(myList,num):
if len(myList)<=num: return myList #Might not be enough elements
if num==0: return []
if num==1: return [myList[int(round((len(myList)-1)/2))]]
return [myList[int(round((len(myList)-1)/(2*num)))]]+select_elements(myList[int(round((len(myList)-1)/(num))):],num-1)
>>> i = range(10)
>>> for j in range(11):
print(j,select_elements(i,j))
0 []
1 [4]
2 [2, 6]
3 [2, 5, 8]
4 [1, 3, 5, 8]
5 [1, 3, 5, 7, 8]
6 [1, 3, 4, 6, 7, 8]
7 [1, 2, 3, 4, 6, 7, 8]
8 [1, 2, 3, 4, 5, 6, 7, 8]
9 [0, 1, 2, 3, 4, 5, 6, 7, 8]
10 range(0, 10)
我们可以花一整天的时间来争论在某些情况下正确的分布是什么。这真的取决于你想要什么。上面的内容可以有所改进,但我想我会把事情搞定...
解决方案
一种方法是使用递归函数。这让我写起来更快,但我猜不是很 pythonic。无论如何,它完成了工作:
>>> def select_elements(myList,num):
if len(myList)<=num: return myList #Might not be enough elements
if num==0: return []
if num==1: return [myList[int(round((len(myList)-1)/2))]]
return [myList[int(round((len(myList)-1)/(2*num)))]]+select_elements(myList[int(round((len(myList)-1)/(num))):],num-1)
>>> i = range(10)
>>> for j in range(11):
print(j,select_elements(i,j))
0 []
1 [4]
2 [2, 6]
3 [2, 5, 8]
4 [1, 3, 5, 8]
5 [1, 3, 5, 7, 8]
6 [1, 3, 4, 6, 7, 8]
7 [1, 2, 3, 4, 6, 7, 8]
8 [1, 2, 3, 4, 5, 6, 7, 8]
9 [0, 1, 2, 3, 4, 5, 6, 7, 8]
10 range(0, 10)
我们可以花一整天的时间来争论在某些情况下正确的分布是什么。这真的取决于你想要什么。上面的内容可以有所改进,但我想我会把事情搞定...