有没有办法在python中删除列表?

时间:2012-01-08 06:57:30

标签: python data-structures

我正在寻找一种潜入列表并直接访问其元素的方法。例如,以下是获取集合的笛卡尔乘积的常规方法。

>>> list(itertools.product((0,1), (0,1),(0,1),(0,1)))
[(0, 0, 0, 0), (0, 0, 0, 1), (0, 0, 1, 0), (0, 0, 1, 1), (0, 1, 0, 0), (0, 1, 0, 1), (0, 1, 1, 0), (0, 1, 1, 1), (1, 0, 0, 0), (1, 0, 0, 1), (1, 0, 1, 0), (1, 0, 1, 1), (1, 1, 0, 0), (1, 1, 0, 1), (1, 1, 1, 0), (1, 1, 1, 1)]

但是在这种情况下,这四个套装是相同的,很快就会一次又一次地输入它而感到厌烦和厌倦,这让人想到这样做:

>>> list(itertools.product([(0,1)]*4)

但当然它不起作用,因为itertools.product函数会将其视为一组而不是四组。所以,问题是,有没有办法做到这一点:

>>> list(itertools.product(delist([(0,1)]*4))

2 个答案:

答案 0 :(得分:8)

itertools.product((0,1), repeat=4)

product函数接受optional repeat argument。以上相当于itertools.product((0, 1), (0, 1), (0, 1), (0, 1))


一般来说,如果你有一个清单

lst = [1, 2, 4, 6, 8, ...]

并且您想将函数称为

f(1, 2, 4, 6, 8, ...)

您可以使用the * (unpack) operator将列表展开到参数列表中:

f(*lst)

答案 1 :(得分:3)

如果您未使用itertools.product,则还可以使用*运算符。 *运算符通过“delist”执行我认为您的意思。它将列表或其他可迭代对象的内容转换为函数的位置参数。一般来说:

args = ['arg1', 'arg2', 'arg3', 'arg4']

# The following two calls are exactly equivalent
func('arg1', 'arg2', 'arg3', 'arg4')
func(*args)

在此特定示例中,代码如下所示:

itertools.product(*[(0,1)]*4)

然而,在itertools.product的特定情况下,之前的答案(由KennyTM提出)可能更清晰:

itertools.product((0, 1), repeat=4)