【问题标题】:Convert a for loop to a list comprehension将 for 循环转换为列表推导
【发布时间】:2016-06-14 22:03:58
【问题描述】:

我有一个for 循环,它将字符串列表中每个元素的子字符串与另一个字符串列表中的元素进行比较。

mylist = []
for x in list1:
    mat = False
    for y in list2:
        if x[:-14] in y:
            mat = True
    if not mat:
        mylist.append(x)

但是我想把它放在一个列表理解中(对于我的口味来说,for 循环并不简洁)但是找不到通过计算 mat 来实现它的方法。

我尝试过以下方面的变化:

 mylist = [x for x in list1 if x[:-14] in list2]

但这与原始循环的逻辑不同。有没有办法将原来的 for 循环改造成列表理解?

【问题讨论】:

  • 不,这不是转换服务。如果您自己尝试过并且卡在某个地方,请提供minimal reproducible example。另请注意,并非所有for 循环都可以成为列表推导。
  • 我已经删除了前言,因为元内容不属于问题,人们可以否决他们是否给你一个答案/一个链接。这根本不是“很明显这是一个问题,因此它可以应用于更广泛的问题”您确实要求转换您的一个示例 ,无需任何明显的代表您自己的努力。
  • 尝试自己做,如果遇到问题,请返回这里 :)
  • @MartinP 所说的。您不必提供“指向所有其他事物的链接”,但到目前为止,您的研究的编辑要点会很好。 “我至少花了大概 30 分钟” - 哦,整个……呃,半小时?见meta.stackoverflow.com/q/261592/3001761
  • “为我做[任务]”的帖子通常很不受欢迎,就像不给你投反对票的命令一样。这是一个问答网站;如果你需要帮助,你应该提出问题。 (不过,Meta 的答案很糟糕。)

标签: python list list-comprehension


【解决方案1】:

正如它所写的,不,你不能直接把它写成一个列表推导式。

但是,如果您将 mat 的计算重写为单个表达式。 (在这种情况下,您将使用any

mylist = []
for x in list1:
    mat = any((x[:-14] in y) for y in list2)
    if not mat:
        mylist.append(x)

然后将该定义直接移动到if not 条件中:

mylist = []
for x in list1:
    if not any((x[:-14] in y) for y in list2):
        mylist.append(x)

现在转换非常简单:

mylist = [x for x in list1 if not any((x[:-14] in y) for y in list2)]

【讨论】:

  • 朋友,您阅读了问题的重点并提供了一个简洁的答案,其中包括从 for 循环转换为列表理解的方法。我刚试了一下,效果很好。信仰 SO = 恢复!
  • @user3496060 我很高兴我恢复了您的信心,因为您显然喜欢从示例中学习我已将您的问题编辑为我认为适合 SO 的内容(原件非常本地化,而不是很可能对未来的观众有帮助)我希望它可以让你更好地了解什么样的问题会更容易被接受,这样你就不会再失去信心了!
【解决方案2】:

你在寻找这样的东西吗?:

mylist = [x for x in list1 if x[:-14] not in list2]

【讨论】:

  • 是的,我在发布之前尝试过这个(找到另一个例子)但它没有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-18
  • 1970-01-01
  • 2020-03-29
相关资源
最近更新 更多