【问题标题】:How to merge a for loop with an if-else statement?如何将 for 循环与 if-else 语句合并?
【发布时间】:2018-03-27 19:51:20
【问题描述】:

我正在尝试删除列表中所有彼此相等的 first 元素,但我发现我的代码很难看。

这里是一个例子:my_list = [1,1,1,9,9,2] 变成 my_list = [1,9,9,2]

for spot_prec, spot in zip(my_list, my_list[1:]):
    if spot_prec == spot:
        del spot_prec
    else:
        break

如何压缩它?我听说过生成器表达式,但在包含我的 else break 语句时遇到了问题。

【问题讨论】:

  • 看起来您正在寻找在itertools recipes 中找到的unique_justseen
  • 你到底想做什么 - 不知道你为什么在这里循环......?而且我不认为代码在做你认为的那样......
  • 你能包括示例输入和所需的输出吗?

标签: python generator-expression


【解决方案1】:

在澄清 OP 之后,似乎需要的是:

for ii, element in enumerate(my_list):
    if element == my_list[0]:
       continue
    else:
       break
new_list = my_list[ii-1:]

另外,使用 itertools dropwhile,我们可以连接元素 0 和在开头删除任何等于第一个元素的元素的结果:

new_list = [my_list[0]] + list(dropwhile(lambda x: x == my_list[0], my_list))

【讨论】:

  • 我不想只检查第一个和第二个元素,这里是一个例子:my_list = [1,1,1,9,9,2]变成my_list = [1,9,9,2]
  • 您可以通过多种方式进行操作,我已将答案更改为包含两个示例,我更喜欢第一个示例,因为它更明显。
猜你喜欢
  • 2016-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-18
  • 2017-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多