python - 如何在Python中获得不同的组合?

标签 python python-2.7

给定 Lista 每个都包含一个 id 名称(例如 a), 符号 '=' 和逗号分隔的值列表。我需要生成另一个列表,它是 'id= value' 子字符串的组合,这样每个 id-value 组合都存在于输入中,并且每个值仅使用一次。

Lista:
    [
    'a= aVal1,aVal2',
    'b=bVal1,bVal2,bVal3',
    'c= cVal1,cVal2',
    ]

预期输出:

Listb:
    [
    'a=aVal1& b=bVal1&c=cVal1',
    'a=aVal1&b=tyVal1&c=cVal2',
    'a=aVal1&b=tyVal2&c=tzVal1',
    'a=aVal1&b=tyVal2&c=tzVal2',
    ]

我尝试使用 itertools.permutations() 来解决这个问题功能,但我无法继续进行。我应该采取什么类型的方法来解决这个问题?

最佳答案

我通常不会针对看似家庭作业的问题发布完整的工作解决方案,所以请认为自己很幸运。 :)

#!/usr/bin/env python

from itertools import product

lista = [
    'a=aVal1,aVal2',
    'b=bVal1,bVal2,bVal3',
    'c=cVal1,cVal2',
]

newlists = []
for s in lista:
    head, _, tail = s.partition('=')
    newlists.append(['%s=%s' % (head, u) for u in tail.split(',')])

listb = ['&'.join(t) for t in product(*newlists)]

for row in listb:
    print row

输出

a=aVal1&b=bVal1&c=cVal1
a=aVal1&b=bVal1&c=cVal2
a=aVal1&b=bVal2&c=cVal1
a=aVal1&b=bVal2&c=cVal2
a=aVal1&b=bVal3&c=cVal1
a=aVal1&b=bVal3&c=cVal2
a=aVal2&b=bVal1&c=cVal1
a=aVal2&b=bVal1&c=cVal2
a=aVal2&b=bVal2&c=cVal1
a=aVal2&b=bVal2&c=cVal2
a=aVal2&b=bVal3&c=cVal1
a=aVal2&b=bVal3&c=cVal2

我已将列表名称更改为小写 - 以大写字母开头的名称(如 ListaListb)通常保留用作类名称Python。

如果您不明白我在此程序中所做的任何事情,请询问,我会尽力解释。


可以在一行中完成此操作,但它不太容易阅读:

listb = ['&'.join(t)for t in product(*[['%s=%s'%(i,v)for v in j.split(',')]for i,j in[s.split('=')for s in lista]])]

:)


字符串 .partition() method将字符串拆分为 3 部分:分隔符之前的子字符串、分隔符本身以及分隔符之后的子字符串。
因此 head, _, tail = s.partition('=') 将 id 捕获到 head 中,并将所有关联值捕获到 tail 中。< br/> 我使用 _ 捕获分隔符,以表明我们并不真正需要该值(因为我们已经知道它是 =)。
下一行的列表理解使用 .split(',') 拆分值。

关于python - 如何在Python中获得不同的组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29160872/

相关文章:

python - Python 计数器的 Time.sleep 不准确?

python - numpy 中没有临时项的外积的非平凡总和

用于查看文件是否在今天创建的 Python 脚本,发送包含结果的电子邮件

python - 将列表写入具有某些自定义格式的文件

python - 无法在 GPU 上运行 tensorflow

python 请求给出 'None' 响应,其中需要 json 数据

python - 为什么在 Python 中修改父框架仅适用于模块框架?

python-2.7 - 在测试类中找不到 __init__ 变量?

python - 无法在 OpenCV 中展开图像

Python Pandas 根据条件更改值