【问题标题】:Expected string or bytes-like object in list comprehension列表理解中的预期字符串或类似字节的对象
【发布时间】:2023-04-05 08:24:01
【问题描述】:

我正在尝试遍历列表“公司”以查找在其第 5 个元素中包含“VIC”的元组。但是,我收到以下错误:

'预期的字符串或类似字节的对象'

我知道这个错误是由于列表的最后一个元组中未完成的括号造成的。我将如何解决这个问题? (公司列表来自大型数据集)

我应该怎么做才能解决这个问题?

merchant_state = 'VIC'

companies = [(378355, 'ACT', 'DEJAN TOMIC', 'Individual/Sole Trader', 
'VIC', '3175', 97603461250, 'FADEDLINESBARBERSHOP', 20), 
(408649, 'ACT', 'ALEXANDER DEJANOVIC', 
'Individual/Sole Trader', 'NSW', '2193', 97733511621, None, 20),
(433402, 'ACT', 'LUTHERAN CHURCH OF AUSTRALIA QUEENSLAND DISTRICT(LUTHERAN COMM CAR', 'Other Unincorporated Entity', 'QLD', '4560', 97899426696, 'GRACEVILLE CENTRE', 20)]

companies = [item for item in companies if re.search(item[4],merchant_state, re.IGNORECASE ) != -1]

【问题讨论】:

  • 您正在解析整数,re 无法处理。
  • 这里的数据无法重现您的错误,可能在您的实际数据中item[4]中存在非字符串,我们无法知道。请注意,无论错误if re.search(item[4],merchant_state, re.IGNORECASE ) != 1 应该是if re.search(item[4],merchant_state, re.IGNORECASE ) != -1,代码都不会按您期望的方式工作,因为re.search 永远不会返回-1 或任何整数,它返回一个re.Match 对象或@987654328 @,因此 oyu 可以过滤真实性
  • @juanpa.arrivillaga。你是对的。我现在修改了我的问题以反映这一点。
  • 您的编辑根本没有解决这个问题。代码仍然没有抛出任何错误。也不清楚您所说的“我知道这个错误是由于列表的最后一个元组中未完成的括号造成的。我该如何解决这个问题?(公司列表来自一个大型数据集)”...... 没有未完成的括号,不清楚您的意思,除非您指的是str 中的括号,但为什么这会影响任何事情呢?
  • 请注意,该错误表明re.searchsecond 参数类型错误。那将是merchant_state,而不是item[4]

标签: python list list-comprehension re


【解决方案1】:

列表理解循环遍历列表序列--but doesn't change or delete any elements in it--。我想你想要的是filter(fun, seq)。为简单起见,您可以过滤所有等于 VIC 的第 4 个索引。

companies = filter(lambda r: r[4] == 'VIC', companies)

print(companies) # this will print <filter object at 0x....> because it's lazy invoked

for i in companies:
    print(i)

编辑:我的立场是正确的,列表理解 CAN 过滤器。

【讨论】:

  • 理解适用于过滤 - 这就是他们的 if 子句的用途。
  • 列表推导绝对可以过滤列表,重点是能够进行映射/过滤操作
  • 这并不能解释 OP 的错误,这是不可重现的
  • 我确定 2to3 用列表列表替换过滤器 - 2to3 推荐后者的理由是什么?它在 python3 中是否更受欢迎?
  • 反正错误与这个无关
猜你喜欢
  • 2022-01-21
  • 1970-01-01
  • 2022-01-04
  • 2019-10-31
  • 1970-01-01
  • 1970-01-01
  • 2018-10-17
  • 2020-07-08
  • 2018-11-21
相关资源
最近更新 更多