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']