python– 从列表中创建字符串的有效方法

python– 从列表中创建字符串的有效方法,第1张

概述我有一些非常低效的代码,我想更通用/更高效.我试图从一组列表中创建字符串.这是我目前拥有的:#contains categories numind = [('Length',), ('Fungus',)] #contains values that pertain to the categories records = [('Length', 'Long

我有一些非常低效的代码,我想更通用/更高效.我试图从一组列表中创建字符串.

这是我目前拥有的:

#contains categorIEsnumind = [('Length',),('Fungus',)] #contains values that pertain to the categorIEsrecords = [('Length','Long'),('Length','Med'),'Yes'),'No')] #contains every combination of values between the 2 categorIEs. #for example,(Long,Yes) = Length=Long & Fungus = Yes.combinations = [('Long',('Long','No'),('Med','No')] 

现在我想创建在我的组合列表中包含每个组合的字符串.这是效率低下的部分.我喜欢它,所以我不必硬连接“numind”列表的长度.有任何想法吗?

values = combinationsvaluestring = []if len(numind) == 0:   passelif len(numind) == 1:   for a in xrange(len(values)):      valuestring.append(numind[0][0]+values[a][0]) elif len(numind) == 2:   for a in xrange(len(values)):      valuestring.append(numind[0][0]+values[a][0]+'_'+numind[1][0]+values[a][1]) #and so forth until numind is 10+

产量

['LengthLong_FungusYes','LengthLong_FungusNo','LengthMed_FungusYes','LengthMed_FungusNo']
最佳答案我将itertools.product与collections.OrderedDict一起使用(后者并非绝对必要,但意味着您无需考虑就能获得正确的订单):

>>> from collections import OrderedDict>>> from itertools import product>>> >>> d = OrderedDict()>>> for k,v in records:...     d.setdefault(k,[]).append(v)...     >>> dOrderedDict([('Length',['Long','Med']),['Yes','No'])])>>> ['_'.join(k+v for k,v in zip(d,v)) for v in product(*d.values())]['LengthLong_FungusYes','LengthMed_FungusNo']

itertools.product自然地产生“每个组合”部分(实际上称为笛卡尔积,而不是组合):

>>> product(["Long","Med"],["Yes","No"])

这里的优点是,无论有多少类别或与任何类别相关联的值有多少都是无关紧要的:只要它们在记录中指定,它就应该有效. 总结

以上是内存溢出为你收集整理的python – 从列表中创建字符串的有效方法全部内容,希望文章能够帮你解决python – 从列表中创建字符串的有效方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1205319.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)