使用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转化一下。

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

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

  1. python取列表前几个元素_python list输出最后10个元素

    python list输出10个元素的方法 怎么在python中输出一个列表中出现次数前十的元素 打印列表中出现前十的元素,可以利用列表的count属性,可以计数,然后根据数量多少排序 来输出元素 a ...

  2. python求二维数组各行最大值_python+numpy按行求一个二维数组的最大值方法

    问题描述: 给定一个二维数组,求每一行的最大值 返回一个列向量 如: 给定数组[1,2,3:4,5,3] 返回[3:5] import numpy as np x = np.array([[1,2,3 ...

  3. python取列表前几个元素_Python 获取list(列表)前n个不重复元素

    a = [1,2,2,3,3,4,5,6] 1.第一种方法def get_unique_N(iterable, N): """Yields (in order) the ...

  4. python 取一个字前的文本的_python删除某一行字符前面的内容

    python怎么把字符串第一个字符去掉年轻总是容易犯错的,尤其是拿爱和岁月比漫长. 比如小编输入C69.6 怎样保留69.6而去掉"C" 编写一个python程序,从非空字符串中删 ...

  5. list 删除元素 以一个list中的元素(或数组中的元素)为下标

    以一个list中的元素为下标,或者用一个数组中的元素为下标,来删除某个list中对应下标的元素. package cn.iponkan.test;import static org.junit.Ass ...

  6. python列表元素筛选_Python如何筛选序列中的元素

    本篇文章给大家带来的内容是关于Python如何筛选序列中的元素 ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.需求 序列中含有一些数据,我们需要提取其中的值或根据某些标准对序列 ...

  7. python内置函数返回序列中最大元素_Python之路(第八篇)Python内置函数、zip()、max()、min()...

    一.python内置函数 abs() 求绝对值 例子 print(abs(-2)) all() 把序列中每一个元素做布尔运算,如果全部都是true,就返回true, 但是如果是空字符串.空列表也返回t ...

  8. python内置函数用来返回数值型序列中所有元素之和_Python内置函数______用来返回数值型序列中所有元素之和...

    [填空题]表达式 int(4**0.5) 的值为 [判断题]3+4j不是合法的Python表达式. [填空题]已知列表对象x = ['11', '2', '3'],则表达式 max(x) 的值为 [填 ...

  9. python内置函数可以返回数值型序列中所有元素之和_Python内置函数________________用来返回数值型序列中所有元素之和。...

    [单选题]表达式 ','.join('a     b  ccc\n\n\nddd     '.split()) 的值为______________. [单选题]表达式 'abcabcabc'.coun ...

最新文章

  1. 准备好了?测试人员迟早会被要求测试包含区块链技术的解决方案
  2. 获取进程号并赋值判断进程状态
  3. J2EE 企业级应用架构简述
  4. QT+vs2010下改变可执行程序的图标
  5. EventBus使用实例,观察者模式
  6. PyTorch框架学习十——基础网络层(卷积、转置卷积、池化、反池化、线性、激活函数)
  7. linux mv时间,简介Linux中cp和mv搭配{,}在shel_l当中的用法
  8. centos6.8yum安装mysql_centos6.8 yum安装mysql 5.6 (完整)
  9. 量子纠缠可能是真实存在
  10. 【14年浙江省赛 ZOJ 3778】Talented Chef
  11. 利用MATLAB生成软件二阶低通滤波器(绝对靠谱)
  12. win10无法新建文件夹怎么办?(已解决)
  13. 今晚7:30 | 结构化知识的统一建模和多任务学习
  14. unity 打开项目路径无效_怎么打开已有的unity工程文件?如何打开一个已有的unity3d游戏工程啊?...
  15. 【Tomcat】一分钟教你eclipse如何配置tomcat(二)
  16. 【MyBatis错误集】--lineNumber: 132; columnNumber: 28; 元素类型 insert 必须后跟属性规范 或 /
  17. DebugView Windows 7 不显示调试信息
  18. 深度学习系列24:开源抠图算法
  19. 职场技巧:如何跟老板谈涨工资?
  20. Python3中print的高级用法——print中执行命令和函数:print(*meta)

热门文章

  1. 进程同步,异步,互斥
  2. 四个小时不止是敲了30多行代码,还懂了好多
  3. JavaScript 和 typeScript 中的 import、from
  4. CompletableFuture详解~thenCompose
  5. 复选框怎么点td选中_jQuery点击tr实现checkbox选中的方法
  6. 如何将计算机加入到域环境中,如何在讲计算机加入一个WinXP的域环境
  7. 计算机英语audios啥意思,2020考研英语词汇:audio是什么意思
  8. php邮件中文乱码,phpmailer 发送邮件中文乱码问题的解决方法总结
  9. go 单元测试 testing 打印输出_2020,你需掌握go 单元测试进阶篇
  10. 软件设计开发笔记1:基于状态机的程序设计