python取列表前几个元素_Python下几种从一个序列中取出元素的方法

使用Python进行数据处理时,有时候会有这样的操作,比如从一个列表或者numpy array中随机取出一个元素,对一个列表中的元素进行shuffle,等等。虽然这些操作也可以通过编写很简短的程序完成,但我们使用Python有一点很重要,就是不要重复遭轮子,如果有轮子可以直接拿来用,为什么不省时省力地去用呢?

1.从序列中随机取出一个或多个元素

使用random模块的sample函数:

从列表lst或numpy array中随机取出k(当然,k要小于等于lst中元素的个数)个元素:random.sample(lst, k)

import random

lst = range(20)

print(random.sample(lst, 1)) #取出1个元素

print(random.sample(lst, 5)) #取出多个元素

import random

lst = range(20)

print(random.sample(lst, 1)) #取出1个元素

print(random.sample(lst, 5)) #取出多个元素

import random

lst = range(20)

print(random.sample(lst, 1)) #取出1个元素

print(random.sample(lst, 5)) #取出多个元素

2.对一个序列中的元素进行shuffle

其实如果使用1中的sample函数,从lst中随机取出所有元素,也就实现了对列表中元素进行shuffle的目的。

import random

lst = range(20)

print(random.sample(lst, len(lst)))

import random

lst = range(20)

print(random.sample(lst, len(lst)))

import random

lst = range(20)

print(random.sample(lst, len(lst)))

也有另一种方法,使用numpy的random下的permutation函数,即:np.random.permutation。该函数直接输入一个序列,即返回shuffle后的该序列。其参数可以为列表,也可以为numpy array。

import numpy as np

nda = np.array(range(20))

print(np.random.permutation(nda))

import numpy as np

nda = np.array(range(20))

print(np.random.permutation(nda))

import numpy as np

nda = np.array(range(20))

print(np.random.permutation(nda))

3.从序列中取出固定长度的所有组合

有时候我们需要从序列中取出固定长度的所有组合,比如一个有10个元素的列表,我们从中取出所有元素的两两组合,即取出长度为2的所有组合,可以使用itertools模块的combinations函数:

import itertools

lst = range(10)

print(list(itertools.combinations(lst, 2)))

import itertools

lst = range(10)

print(list(itertools.combinations(lst, 2)))

import itertools

lst = range(10)

print(list(itertools.combinations(lst, 2)))

上面的程序中,因为itertools的函数返回的是一个iterator,所以需要用list将其转为列表,然后打印输出。

4.从序列中取出元素的所有排列组合

有时候我们需要从序列中取出元素的所有组合,比如,如果列表中的每个元素对应于一个模型的效果,我们想看不同模型ensamble起来的结果,来找到最优组合,就需要这种操作。

还是使用itertools的combinations函数,如下:

import itertools

lst = range(5)

for i in range(len(lst)):

_lst = itertools.combinations(lst, i+1)

print(_lst)

import itertools

lst = range(5)

for i in range(len(lst)):

_lst = itertools.combinations(lst, i+1)

print(_lst)

import itertools

lst = range(5)

for i in range(len(lst)):

_lst = itertools.combinations(lst, i+1)

print(_lst)

该函数返回的是一个iterable,所以打印显示前需要用list转化一下。

如果取出元素的顺序不同也算不同的方式,即取出元素的所有排列呢?可以使用itertools的permutations函数,如下:

import itertools

lst = range(5)

print(list(itertools.permutations(lst)))

print(list(itertools.permutations(lst, 3)))

import itertools

lst = range(5)

print(list(itertools.permutations(lst)))

print(list(itertools.permutations(lst, 3)))

import itertools

lst = range(5)

print(list(itertools.permutations(lst)))

print(list(itertools.permutations(lst, 3)))

该函数返回的也是一个iterable,所以打印显示前也需要用list转化一下。

此外,该函数可以传一个长度的参数,以示取出的排列长度。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值