python二维列表每个子列表取一个元素的所有组合
这是一个汉字字符串: "银行卡测试"
我要求出他的拼音首字母组合,
预期:"yhkcs"
实际:"yhqcs"
没错,它含有一个多音字:卡
念ka 或者 qia
我的需求就变成了:我要获取它所有可能的首字母组合,放到一个大列表中。
通过第三方pinyin库,我成功的拿到了他们首字母组成的二维数组,每个元素就是一个字的首字母列表:
"银行卡测试" = [['y'],['h'],['q','k'],['c'],['s']]
这个的最终结果应该是:
['yhqcs','yhkcs'] 长度为2
当然,换一个多个多音字的:
"长卡测" = [['c','z'],['q','k'],['c']]
预期结果:
['cqc','ckc','zqc','zkc'] 长度为4
最终元素总个数为每个子列表长度的乘积。
当然还有更复杂的:
[['a','b','c','d'],['e','f','g'],['h','i']]
这个预期大列表的长度应该是 4*3*2 = 24
那么以上的需求用代码如何实现?
苦思冥想,写出了一套算法,我觉得我应该是唯一一个这么写的:
from allpairspy import AllPairs
old = [['a','b','c','d'],['e','f','g'],['h','i']]
ready = []
for pairs in AllPairs(old[:2]):
ready.append(''.join(pairs))
for i in range(2, len(old)):
new_r= []
for pairs in AllPairs([ready, old[i]]):
new_r.append(''.join(pairs))
ready=new_r
print(ready)
print(len(ready))
给大家看看结果:
一点问题没有。
至于为什么我会想出这个解决办法呢?
我给大家说一下思路,非常有意思
首先我觉得直接去写递归 很麻烦。效率也不行,就想着有没有野路子搞定。
然后突然想到,这一个一个的子列表,就好像是我们测试中面对一个功能界面
上的一个一个多选输入框,而子列表内不确定数量的字母,就像是这些多选框内的子选项。
我们平时遇到要测试这种功能的时候,要怎么做呢?目的就是要尽可能的测出所有组合情况!
即每个下拉多选框只能选一个。多个框的各种组合我都要测到。
他们直接很明显没有任何逻辑强关联,这时我们应该首选 黑盒用例设计方法中的 正交!
是的正交,它可以自动生成各种情况对应的组合,每种组合就是一条最终用例!
但是!
正交算法的出现 就是为了避免穷尽测试,而我这次的需求就是要穷尽所有可能组合。
所以正交算法要稍微改一改了,毕竟这个第三方算法性能很好,我利用上性能绝对错不了!
正交的基本原则是 保证多个输入条件中,任何一个的子状态,和任何另外一个输入中的子状态 都同时出现过 即可。最终正交算法出来的所有组合数量,肯定是远小于全部组合的。
比如:
[['a','b'],['c','d'],['e','f']]
穷尽的数量应该是:2*2*2 = 8
而正交算法的数量:
['a', 'c', 'e']
['b', 'd', 'e']
['b', 'c', 'f']
['a', 'd', 'f']
最终4种,这4种你可以发现,任何俩个子列表的任何子元素都同时出现过。
比如:a 和f ,有。
d和e 也有。
所以正交算法是为了降低我们测试用例数量,但又保证全面覆盖的东西。
但是这里我们要如何应用它以便让其变成输出穷尽所有的 8种结果呢?
很简单,当只有俩个子列表,也就是只有俩个输入的时候。那么此时,正交算法的结果和穷尽结果 是完全相等的。
也就是说,我这个需求虽然可能有4个甚至更多个子列表,但是我只要用正交算法每次只算其中俩个子列表的穷尽,然后再把这个穷尽的结果当作一个新的子列表,再去和另一个新的子列表去计算穷尽,然后再把结果当作一个新的子列表再去和下一个子列表计算穷尽,直到没有子列表了,这时候的新的子列表就是最终结果!
大家是不是看到比较绕?
我用图来说明:
每次这样叠加算出后 最后就是最终结果。安全快捷准确!
然后就成了最上面的我分享的那个最终算法。
有兴趣的可以试试。当然我觉得 我应该是唯一一个靠 这么曲线救国的做法的测试了吧。
能想出这个方法,首先要感谢
我庞大精通的测试理论基础:黑盒测试用例设计方法-正交法
研究过正交的第三方python函数: allpairspy
长年刷leetcode练就的骚操作思维
所以小伙伴们,千万不要再说刷leetcode,写算法对我们测试没有用了。
别忘了点赞和分享
感兴趣的可以加群,加博主微信:qingwanjianhua 拉你入群
加社团:https://testerhome.com/wqrf
关注博主博客:https://wangzijia.blog.csdn.net/
点亮该项目:https://github.com/Woqurefan/ApiTest/
体验在线地址:http://47.97.77.125:8000/home/
公众号:测试开发干货
python二维列表每个子列表取一个元素的所有组合相关推荐
- 案例演示Python二维列表与Java二维数组
1.Python二维列表案例演示 运行程序,结果如下: 2.案例演示Java二维数组 package net.hw.test;/*** 功能:二维数组用法示例* 作者:华卫* 日期:2013年12月1 ...
- python 二维列表_python二维列表
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 方法一:使用 lambda 关键词辅助对二维列表进行排序,lambda的使用方法 ...
- Python 二维列表按多列排序 反向排序
Python 二维列表按多列排序 (有多个元素需要排序 代码 代码 两种方法均可 raw_list = [[6,2,'c'],[4,5,'b'],[7,8,'a']]sorted_list = sor ...
- Python二维列表转换为一维列表
Python二维列表转换为一维列表 Python二维数组转换为一维数组 二维转一维 # 第一种写法 拆解的写法a = [] ab = [[1,2,3], [5,8], [7,8,9]] for ite ...
- Python二维列表赋值问题
Python二维列表的赋值问题 使用该方法建立的二维列表,对a[0][0]进行赋值1,结果第一列全部被赋值为1: >>> a = [[0]*5]*5 >>> a [ ...
- Python 二维列表操作
Python 二维列表操作 创建二维列表对象 初始化一个2*3尺寸大小的全零二维列表 获取二维列表行元素的个数 获取二维列表总元素个数 今天介绍一下 Python中二维列表的一些操作. 创建二维列表对 ...
- python二维列表
python二维列表 1. 本质 2. 创建二维列表 3. "读" 二维列表 4. "写" 二维列表 5. 遍历二维列表 6. 练习1 7. 练习2 1. 本质 ...
- python二维列表转置
python 二维列表转置 def transpose(self, matrix):new_matrix = []for i in range(len(matrix[0])):matrix1 = [] ...
- python二维列表转一维列表
list_ = [[1,2,3], [5,8], [7,8,9]] 法一 [i2 for i1 in list_ for i2 in i1] 法二 sum(list_,[]) 法三 from tkin ...
最新文章
- 轻量级网络skipnet
- index 4 is out of bounds for dimension 1 with size 4
- php的filter input,记一个php://filter和php://input的CTF题
- Linux内核模块学习笔记(转载)
- 重磅|施耐德电气O2O数字化咨询服务强势来袭
- HTML-JS 循环 函数 递归
- react api_使用Java EE 8中的React式API加速服务
- linux创建逻辑目录,Linux创建逻辑卷
- 致我们终将逝去的39%“峰值性能”!
- Vue小案例 之 商品管理------添加商品
- 从 0 开始学习 GitHub 电子书免费送
- c语言量程程序,量程自动切换数字电压表c语言原程序
- C实现的UDP压力测试工具
- 21世纪将淘汰的八种人
- 苹果HomeKit生态深度解析,在智能家居领域后发制人?
- redis为什么快?
- Dep包管理的主要机制
- 大学生活该如何度过?思维导图告诉你
- 疫情之下,企业和员工到底该何去何从?
- 如何选择合适的境外网站服务器?
热门文章
- ACM大量习题题库及建议培养计划
- python xlrd使用_在Python中使用xlrd以文本形式读取数值Excel数据
- deepin做服务器稳定吗,deepin从兴致勃勃到彻底放弃
- phpmywind 数据记录查询
- c语言课程设计作业五子棋,c语言课程设计案例-五子棋.ppt
- Hoodoop-MapReduce学习
- Slowly Change Dimention 常见三种类型
- 前端vue中ts无法识别引入的vue文件,提示找不到xxx.vue模块的解决【引入新建页面或者通过router引入时报错】
- 姜烧猪肉+日式厚蛋烧+蚝油青笋
- php 验证手机号码格式