Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
生成可能数组列表的Pythonic方法_Python - Fatal编程技术网

生成可能数组列表的Pythonic方法

生成可能数组列表的Pythonic方法,python,Python,给定一个数字数组(例如[3,5,2]),我试图生成一个可能的数组列表,这些数组是通过将1添加到数组中的一个条目得到的:[[4,5,2],[3,6,2],[3,5,3]] 我可以通过下面的方法来完成,但是我想知道是否有一种更像蟒蛇的方法来获得结果 test = [3, 5, 2] result = [t.copy() for _ in range(len(test))] for index, _ in enumerate(result): result[index][index] += 1

给定一个数字数组(例如[3,5,2]),我试图生成一个可能的数组列表,这些数组是通过将1添加到数组中的一个条目得到的:[[4,5,2],[3,6,2],[3,5,3]]

我可以通过下面的方法来完成,但是我想知道是否有一种更像蟒蛇的方法来获得结果

test = [3, 5, 2]
result = [t.copy() for _ in range(len(test))]
for index, _ in enumerate(result):
    result[index][index] += 1

下面是另一个具有列表理解功能的内联解决方案:

test = [3, 5, 2]
result = [[v+1 if i==j else v for j, v in enumerate(test)] for i in range(len(test))]
test = [3, 5, 2]   
print [test[:i] + [v + 1] + test[i+1:] for i,v in enumerate(test)]
或者,正如所注意到的,您可以利用
True==1
False==0
这一事实:

result = [[v + (i==j) for j, v in enumerate(test)] for i in range(len(test))]

下面是如何使用列表理解来完成此操作:

test = [3, 5, 2]
result = [[v+1 if i==j else v for j, v in enumerate(test)] for i in range(len(test))]
test = [3, 5, 2]   
print [test[:i] + [v + 1] + test[i+1:] for i,v in enumerate(test)]
输出

[[4, 5, 2], [3, 6, 2], [3, 5, 3]]

可以肯定的是,你的意思是所有可能的数组的列表,这些数组都是由…产生的,范围可能是多少@dan Tang为什么不使用v+1而不是测试[i]+1@Hooting我刚刚用
timeit
:用
v+1
代替
test[I]+1
节省了0.06µs=)@Hooting:这就是我的本意。老实说!:)谢谢你,很好。不过,不需要创建
test\u range
,因为它只使用一次,所以只需将它放在comp列表中即可。或者,利用False为0,True为1这一事实,对j执行
result=[[v+(i==j),在枚举(test)中执行v]对范围(len(test))中的i执行v]
,尽管有些人可能会抱怨这不如你的条件表达式可读。@PM2Ring Thank's,我要编辑了!这样的评论就是我喜欢StackOverflow的原因!是的,得到分数很好,但合作也很有趣。通过合作,我们可以得出很好的答案,这不仅有助于OP,也有助于未来的读者。