python 多个列表_给出多个变量的所有可能列表的python列表(python list of all possible lists given multiple variables)...

给出多个变量的所有可能列表的python列表(python list of all possible lists given multiple variables)

说我有['xyz'] 。 我想要所有可能的列表,因为x,y和z可以取'a'和'b'的值。 所以结果将是[aaa], [aab], [aba], [abb], [baa], [bab], [bba], [bbb] 。 我想在不知道有多少未知变量或可能的值的情况下这样做。

这是一种优雅而简单的方法吗?

最终结果应该返回一个列表列表:

[[aaa], [aab], [aba], [abb], [baa], [bab], [bba], [bbb]]

say i have a ['xyz']. I want all possible lists given that x, y, and z can take the values of 'a' and 'b'. so the result will be [aaa], [aab], [aba], [abb], [baa], [bab], [bba], [bbb]. I want to do this without first knowing how many unknown variables or possible values there will be.

is there an elegant and simple way of doing this?

the end result should return a list of lists:

[[aaa], [aab], [aba], [abb], [baa], [bab], [bba], [bbb]]

原文:https://stackoverflow.com/questions/27586466

更新时间:2019-12-11 13:13

最满意答案

您可以使用itertools.product,并使用.join将它生成的元组转换为字符串。

import itertools

[ ''.join(x) for x in itertools.product(['a','b'],repeat=3) ]

['aaa', 'aab', 'aba', 'abb', 'baa', 'bab', 'bba', 'bbb']

You can use itertools.product for that, and use .join to transform the tuples it generates to strings.

import itertools

[ ''.join(x) for x in itertools.product(['a','b'],repeat=3) ]

['aaa', 'aab', 'aba', 'abb', 'baa', 'bab', 'bba', 'bbb']

2014-12-21

相关问答

内置函数zip()几乎可以做你想要的: >>> zip(*[(1, 2), (3, 4), (5, 6)])

[(1, 3, 5), (2, 4, 6)]

唯一的区别是你得到元组而不是列表。 您可以将它们转换成列表 map(list, zip(*[(1, 2), (3, 4), (5, 6)]))

The built-in function zip() will almost do what you want: >>> zip(*[(1, 2), (3, 4), (5, 6)])

[(1, 3

...

zip()是一个python函数,而不是在Flask(Jinja2)的模板语言中执行的函数。 因此,在视图中应用zip()并将结果传递给模板: return render_template("main.html", reviews_products=zip(reviews, productnames))

然后应用这个技巧: 如何迭代模板中的jinja中的列表列表 。 zip() is a python function, not a function to be executed in the

...

这可以通过使用列表理解来完成,在列表理解中将列表列表“拼合”到单个列表中,然后使用“join”方法使列表成为一个字符串。 ','部分表示用逗号分隔每个部分。 ','.join([item for sub_list in myList for item in sub_list])

注意:请看下面的分析,以了解在这里提出的其他人提出的最快速解决方案 演示: myList = [['a','b','c','d'],['a','b','c','d']]

result = ','.join([item f

...

您可以使用itertools.product,并使用.join将它生成的元组转换为字符串。 import itertools

[ ''.join(x) for x in itertools.product(['a','b'],repeat=3) ]

['aaa', 'aab', 'aba', 'abb', 'baa', 'bab', 'bba', 'bbb']

You can use itertools.product for that, and use .join to transform

...

你可以在你的列表理解中用两个子句来做到这一点。 第一个遍历列表中的项目。 第二个遍历包含从分割字符串派生的列表的单个项目列表(这是需要的,因此我们可以将其解压缩为三个单独的变量)。 [[int(x), y.strip(), z.strip()] for s in inputs for (x, y, z) in [s.split(",")]]

for子句的使用方式有点违反直觉,但与嵌套for循环的方式相同。 Jon Sharpe使用嵌套理解(实际上是生成器表达式)是相似的,可能更清晰。 使用多个f

...

extend不返回一个值。 因此,打印a.extend(b)将是None 。 因此,如果你有a = [5, 6, 7, 8, 9].extend(range(15, 20))并打印a ,它将显示None 。 一种解决方法是连接列表a = [5, 6, 7, 8, 9] + range(15, 20) [5, 6, 7, 8, 9][2] - 所有事情都应该像它从0开始计算元素一样。它不是修改列表,它只是返回列表中的某个元素。 [5, 6, 7, 8, 7].count(7) [5, 6, 7, 8

...

Python库不是同时对对象进行变异和返回,而是选择只使用一种方式来使用增变器的结果。 从import this : 应该有一个 - 而且最好只有一个 - 明显的做法。 话虽如此,你想要做的更常用的Python风格是使用列表推导或生成器表达式 : [x for x in range(5) if x != 2 and x != 3]

您也可以将这些链接在一起: >>> [x for x in (x for x in range(5) if x != 2) if x != 3]

[0, 1, 4]

...

我可以看到将其保留在列表中没有性能优势。 相反,将它放在列表中会使它变慢: >>> %%timeit

...: x = 3

...: y = 5

...: x2 = x**2

...: z = x2 + exp(y)

...: zz = (y+x)/x2

...:

337 ns ± 1.87 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

>>> %%timeit

...: x = [3, 5]

...: z = x

...

这只是一个部分答案,但将数据放在dicts的字典中会更愉快: dict_a = {

'LEVEL_D': {'difficulty': 'EASY', 'score': 1, 'confidence': 0.778},

'LEVEL_F': {'difficulty': 'EASY', 'score': 6, 'confidence': 0.750},

'LEVEL_C': {'difficulty': 'EASY', 'score': 7, 'confidence': 0

...

您可以像这样使用zip和itertools.chain : from itertools import chain

first = [0, 1, 2, 3, 1, 5, 6, 7, 1, 2, 3, 5, 1, 1, 2, 3, 5, 6]

second = [

[(13, 12, 32), (11, 444, 25)],

[(312, 443, 12), (123, 4, 123)],

[(545, 541, 1), (561, 112, 560)]

]

zip

...

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值