Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.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
Python 对于数组中的每个元素,返回不包含此元素的整个数组_Python_Arrays - Fatal编程技术网

Python 对于数组中的每个元素,返回不包含此元素的整个数组

Python 对于数组中的每个元素,返回不包含此元素的整个数组,python,arrays,Python,Arrays,我希望我的代码为数组中的每个元素返回这个数组,但不返回这个元素。 例如:对于数组numbers=[1,2,3]我希望输出“[2,3]”、“[1,3]”、“[1,2]” 我使用了以下代码: examp = [1, 2, 3, 4, 5] for number in examp: print(str(number) + " MAIN") subExp = examp subExp.remove(number) print(subExp) 但这一个输出(单词“MAIN”用作当前从数

我希望我的代码为数组中的每个元素返回这个数组,但不返回这个元素。 例如:对于数组
numbers=[1,2,3]
我希望输出
“[2,3]”、“[1,3]”、“[1,2]”

我使用了以下代码:

examp = [1, 2, 3, 4, 5]

for number in examp:
  print(str(number) + " MAIN")
  subExp = examp
  subExp.remove(number)
  print(subExp)
但这一个输出(单词“MAIN”用作当前从数组中“减去”哪个元素的信息):

对于上面的代码,我希望:

1 MAIN
[2, 3, 4, 5]
2 MAIN
[1, 3, 4, 5]
3 MAIN
[1, 2, 4, 5]
4 MAIN
[1, 2, 3, 5]
5 MAIN
[1, 2, 3, 4]

这可能是我犯的一些愚蠢的错误,但作为本主题的初学者,我在任何地方都找不到答案,所以如果有更好的方法,请帮助创建一个范围,然后按索引过滤输出数组

examp = [1, 2, 3, 4, 5]

for x in range(0, len(examp)):
    print(f'iteration {x + 1} ->')
    print([el for i, el in enumerate(examp) if i != x])
或者使用itertools

print(list(itertools.combinations(examp, len(examp) - 1)))

问题在于这一行:

subExp = examp
这里的
subExp
不是
examp
的副本,而是另一个指向列表
[1,2,3,4,5]
的指针。因此,在
for
循环的每次迭代中,您都会删除列表中的一个条目

您可以将该行替换为:

subExp = examp.copy()
这将生成
examp
的浅拷贝。虽然这适用于平面列表,但嵌套列表会给您带来麻烦。通常,您希望使用
复制
包的

subExp = copy.deepcopy(examp)

编辑:如果您不需要打印行,那么
itertools.combines()
就是一种方法。有关更多信息,请参见,您可以使用itertools:

import itertools
list(itertools.combinations([1, 2, 3,4,5],4))                                                                                                                                       
# [(1, 2, 3, 4), (1, 2, 3, 5), (1, 2, 4, 5), (1, 3, 4, 5), (2, 3, 4, 5)]

遍历列表,切掉当前元素:

examp = [7, False, "OOpS", 3.14159]

for i in range(len(examp)):
    print(examp[:i] + examp[i+1:])
输出:

[False, 'OOpS', 3.14159]
[7, 'OOpS', 3.14159]
[7, False, 3.14159]
[7, False, 'OOpS']

对于上面的示例,您可以使用列表(itertools.combines([1,2,3],2))
subExp=examp
在循环中修改列表而不首先复制它,这是一个坏主意
[False, 'OOpS', 3.14159]
[7, 'OOpS', 3.14159]
[7, False, 3.14159]
[7, False, 'OOpS']