如何在Python中打印列表,每次跳过一个元素而不使用NumPy?

3

给定

samplelist = [100,101,102,103,104,105,106,107,108,109]

然后我希望输出如下:
[100,[101,102,103,104,105,106,107,108,109]]
[101,[100,102,103,104,105,106,107,108,109]]
[102,[100,101,103,104,105,106,107,108,109]]

注意:在输出的第一行中跳过了100,即 list[0],然后在第二行跳过了list[1]
我尝试了弹出和显示但下一次它没有显示所有被弹出的元素。所以我尝试了再次将它们插入到循环的末尾,但没有成功。

更新: [100,[101, 102, 103, 104, 105, 106, 107, 108, 109]] [101,[100, 102, 103, 104, 105, 106, 107, 108, 109]] [102,[100, 101, 103, 104, 105, 106, 107, 108, 109]] - user2518
3个回答

4
一个简单的列表推导式就可以完成它。
>>> samplelist = [100,101,102,103,104,105,106,107,108,109]
>>> [[el for el in samplelist if el is not i] for i in samplelist]
[[101, 102, 103, 104, 105, 106, 107, 108, 109],
 [100, 102, 103, 104, 105, 106, 107, 108, 109],
 [100, 101, 103, 104, 105, 106, 107, 108, 109],
 [100, 101, 102, 104, 105, 106, 107, 108, 109],
 [100, 101, 102, 103, 105, 106, 107, 108, 109],
 [100, 101, 102, 103, 104, 106, 107, 108, 109],
 [100, 101, 102, 103, 104, 105, 107, 108, 109],
 [100, 101, 102, 103, 104, 105, 106, 108, 109],
 [100, 101, 102, 103, 104, 105, 106, 107, 109],
 [100, 101, 102, 103, 104, 105, 106, 107, 108]]

基本上,它会扫描列表,并为每个元素生成整个列表,不包括当前元素。
或者,您可以使用生成器表达式。
>>> g = ([el for el in samplelist if el is not i] for i in samplelist)
>>> for x in g:
...     print(x)
... 
[101, 102, 103, 104, 105, 106, 107, 108, 109]
[100, 102, 103, 104, 105, 106, 107, 108, 109]
[100, 101, 103, 104, 105, 106, 107, 108, 109]
[100, 101, 102, 104, 105, 106, 107, 108, 109]
[100, 101, 102, 103, 105, 106, 107, 108, 109]
[100, 101, 102, 103, 104, 106, 107, 108, 109]
[100, 101, 102, 103, 104, 105, 107, 108, 109]
[100, 101, 102, 103, 104, 105, 106, 108, 109]
[100, 101, 102, 103, 104, 105, 106, 107, 109]
[100, 101, 102, 103, 104, 105, 106, 107, 108]

根据您的新要求进行编辑(即必须包含跳过的元素):
>>> g = ([i, [el for el in samplelist if el is not i]] for i in samplelist)
>>> for x in g:
...     print(x)
... 
[100, [101, 102, 103, 104, 105, 106, 107, 108, 109]]
[101, [100, 102, 103, 104, 105, 106, 107, 108, 109]]
[102, [100, 101, 103, 104, 105, 106, 107, 108, 109]]
[103, [100, 101, 102, 104, 105, 106, 107, 108, 109]]
[104, [100, 101, 102, 103, 105, 106, 107, 108, 109]]
[105, [100, 101, 102, 103, 104, 106, 107, 108, 109]]
[106, [100, 101, 102, 103, 104, 105, 107, 108, 109]]
[107, [100, 101, 102, 103, 104, 105, 106, 108, 109]]
[108, [100, 101, 102, 103, 104, 105, 106, 107, 109]]
[109, [100, 101, 102, 103, 104, 105, 106, 107, 108]]

如果您认为我的答案正确且比其他答案更好,请将其标记为已接受。谢谢。 - Pynchia
当然。要打印[100,[101,102,103..]]等内容,需要进行哪些更改? 我的意思是,我想要将跳过的值单独放在前面,然后是剩余的列表。 - user2518
啊嗯..这正在变成敏捷实践,你的需求已经改变了!请查看我的编辑。 :) - Pynchia

1
你可以在列表推导式中使用简单的切片:

你可以在列表推导式中使用简单的切片:

>>> [samplelist[:i]+samplelist[i+1:] for i,_ in enumerate(samplelist)]
[[101, 102, 103, 104, 105, 106, 107, 108, 109],
 [100, 102, 103, 104, 105, 106, 107, 108, 109],
 [100, 101, 103, 104, 105, 106, 107, 108, 109],
 [100, 101, 102, 104, 105, 106, 107, 108, 109],
 [100, 101, 102, 103, 105, 106, 107, 108, 109],
 [100, 101, 102, 103, 104, 106, 107, 108, 109],
 [100, 101, 102, 103, 104, 105, 107, 108, 109],
 [100, 101, 102, 103, 104, 105, 106, 108, 109],
 [100, 101, 102, 103, 104, 105, 106, 107, 109],
 [100, 101, 102, 103, 104, 105, 106, 107, 108]]

如果您想捕获省略的项目:

>>> [[samplelist[i],samplelist[:i]+samplelist[i+1:]] for i,_ in enumerate(samplelist)]
[[100, [101, 102, 103, 104, 105, 106, 107, 108, 109]], [101, [100, 102, 103, 104, 105, 106, 107, 108, 109]], [102, [100, 101, 103, 104, 105, 106, 107, 108, 109]], [103, [100, 101, 102, 104, 105, 106, 107, 108, 109]], [104, [100, 101, 102, 103, 105, 106, 107, 108, 109]], [105, [100, 101, 102, 103, 104, 106, 107, 108, 109]], [106, [100, 101, 102, 103, 104, 105, 107, 108, 109]], [107, [100, 101, 102, 103, 104, 105, 106, 108, 109]], [108, [100, 101, 102, 103, 104, 105, 106, 107, 109]], [109, [100, 101, 102, 103, 104, 105, 106, 107, 108]]]

[100,[101,102,103,104,105,106,107,108,109]] [101,[100,102,103,104,105,106,107,108,109]] [102,[100,101,103,104,105,106,107,108,109]] 你能帮我这样吗? 谢谢。 - user2518

1
使用 itertools.combinations():
import itertools
a = [100,101,102,103,104,105,106,107,108,109]
list(itertools.combinations(a, len(a)-1))[::-1]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接