【问题标题】:Python: How to return all elements of list in each iteration except for the current elementPython:如何在每次迭代中返回列表的所有元素,当前元素除外
【发布时间】:2020-03-26 06:32:04
【问题描述】:

我的目标是遍历列表并返回列表中的每个元素,每次迭代的当前索引除外。

例如:

my_list = [1,2,3]

应该返回:

>>>[2,3]

>>>[1,3]

>>>[1,2]

我已经尝试创建一个 for 循环来创建列表的副本,从副本中弹出当前索引并返回它。

my_list = [1,2,3]

for a in my_list:
    the_index = my_list.index(a)
    print(my_list.copy().pop(the_index))

返回

>>>1
>>>2
>>>3

关于如何正确实现这一点的任何想法?

【问题讨论】:

  • 这应该回答你的问题:stackoverflow.com/questions/11520492/…(检查del方法)。
  • 所以基本上只要在你的代码中用 del 代替 pop 就可以了(我没试过)。
  • 原始列表和当前元素之间的差异排序有多重要?
  • @jack 排序并不重要,因为最终目标是返回所有列表的总和。

标签: python-3.x list indexing


【解决方案1】:

以下看起来相当简单:

lst = [1,2,3]
[lst[:i] + lst[i+1:] for i in range(len(lst))]
# [[2, 3], [1, 3], [1, 2]]

或者对于循环打印:

for i in range(len(lst)):
    print(lst[:i] + lst[i+1:])
# [2, 3]
# [1, 3]
# [1, 2]

【讨论】:

  • 你比我快 17 秒 ;-)
  • 当然,这是简单明显的pythonic解决方案。
  • 是的,非常pythonic。您能否阐明为什么使用范围并在其中传递列表的长度?我希望这等于简单地说 range(3),因为列表中有三个元素。显然情况并非如此。我想更好地了解这里发生了什么。
【解决方案2】:
my_list = [1,2,3]
for a in my_list:
    the_index = my_list[my_list.index(a)]
    z=my_list.copy()
    z.pop(the_index-1)
    print(z)

当您使用 pop() 操作打印 copy() 时,它将重新运行弹出的元素,因此将 copy 和 pop() 操作分开。

【讨论】:

  • 好的,感谢您澄清为什么必须分开声明。信息量很大
【解决方案3】:

上面的问题可以用这个来解决:

my_list = [1,2,3]
for b in my_list:
    my_list.remove(b)
    print(my_list)
    my_list.append(b)
    my_list.sort()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2014-03-12
    • 2016-04-07
    • 1970-01-01
    相关资源
    最近更新 更多