当前位置: 首页 > 知识库问答 >
问题:

Python一个带有if、Foreach和数组的衬里

田嘉慕
2023-03-14
cats = CatService.find_all()
data['value'] = [cat for cat in cats if cat.label == data['value']][0].name

我无法理解这一行用python写的是什么。它曾经工作,但现在,我得到一个列表索引超出范围错误。

在运行上述语句之前,给出的结果不是null,但我仍然得到了错误

遗留代码如上所述是用oneliner编写的。当我得到这个错误时,我不得不像下面那样剖析它。

我试着用这种格式写代码来分析和调试。但是我没有得到错误。我想这不是一句台词的正确翻译

    for cat in cats:
        if cat.label == data['value']:
            print("cat match is " + cat.label)
            data['value'] = cats[0].name
        else:
            print("cat non-match is " + cat.label)

编辑:目前我的假设是翻译的代码是正确的,不会出错。但是在线航班确实会出错。不知道为什么。列表中存在700个值。埃里克提供的另一个类似的翻译也有效(埃里克后来改变了它,因此在这里添加了它)

if data['value'] in [topic.label for topic in topics]: data['value'] = topics[0].name

共有2个答案

端木志诚
2023-03-14

您遇到的错误非常不言自明;这意味着您正在访问的列表中没有项目。

您正在更新data['value'],其结果为list理解[cat for cat in cat ifcat.label==data['value']][0]. name。请注意,您在返回列表中转发了[0]元素。当列表为空时,您将遇到此错误。

您无法从列表理解中提取值,因为它可能有0个元素。你必须在一个for循环中运行它,

for cat in cats:
  if cat.label == data['value']:
    data['value'] = cat.name
    break

请注意,您可能希望在比赛后Rest。

如果你分解你更新的代码,

data['value'] = [cat for cat in cats if cat.label == data['value']][0].name

这将比较cats中的每个cat,并创建一个所有匹配cat的列表(由于比较cat.label==data['value'],因此列表中可能会有0、1或N个cat。

然后取第一个项目的名称:[

上面的代码片段实现了代码的意图;找到第一只匹配的猫并返回它的名字。

皇甫树
2023-03-14

我一开始不会使用列表理解,因为你不想要匹配猫的列表;你只想要第一只匹配的猫。我会写信的

cats = CatService.find_all()
for cat in cats:
    if cat.label == data['value']:
        data['value'] = cat.name
        break
 类似资料:
  • 对于range(),我有一个非常奇怪的问题;根据文件: 但当我这样做时: 甚至 输出奇怪地以一系列的方式重复 这意味着它将返回到每个循环后的第一个ID。 当我只是放置一个手动数组时,它的工作非常有序,没有重复: 我做错了什么(又一次??) 编辑I 下面是整个脚本: http://pastebin.com/zhm3ub6n 它实际上是simplehtmldom脚本中包含的slashdot刮取示例的稍

  • 问题内容: 我正在使用和。我知道,这两个类和是不相容的,但我仍然希望做的相当自然的事情- 我想换了每一个在每个迭代步骤一解析(嵌套内部的)。我尝试这样做: 当我尝试编译此代码时,即使看起来很自然,实际上我也会收到“不兼容的类型”错误。所以,我的问题是迭代的最佳方法是什么? 问题答案: 显然,实现了一个 原始 Iterator。这意味着每个元素都被视为。您可以尝试投射: 这就是在Java 1.4和更

  • 问题内容: 我们都知道python的 句法。 但是,列表理解的 AST表示可以容纳多个’if’表达式: 有人可以给我一个python代码示例,该示例会生成带有多个“ if”表达式的AST吗? 问题答案: 只需将它们一个接一个地堆叠: 产生介于11和49之间(含)的整数。

  • 数据库表: 胶片(id\U胶片主键,名称) 流派(id_genrePK,名称) film_genre(id_filmFK,id_genreFK) 这将输出流派表中的所有流派: 这将输出特定电影的电影类型表中的所有选定类型: 我有一个问题,从数据库输出数据到多个选定的列表中的形式。这是一个电影数据库,我正在进行Foreach迭代,以读取电影流派的所有行,并输出到多个选择字段。但是我在向列表输出“选定

  • 问题内容: 这三种方法(都用于将一个数组转换为另一个数组)之间的性能差异(如果有)是什么? 使用 使用和λ/关闭功能 使用带有“静态”函数/方法 还有其他方法吗? 为了使自己清楚,让我们看一下这些示例,它们都做同样的事情-将数字数组乘以10: 佛瑞奇 带有lambda的地图 具有“静态”功能的地图,作为字符串引用传递 还有其他方法吗?我将很高兴听到上面案例之间的 所有 实际差异,以及为什么要使用一

  • null 还有其他办法吗?我将很高兴听到实际所有的差异之间的情况从上面,以及任何输入为什么应该使用一个而不是其他。