首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有不同类型的Python列表成员资格

具有不同类型的Python列表成员资格
EN

Stack Overflow用户
提问于 2019-07-10 18:35:02
回答 1查看 180关注 0票数 1

我有一个各种类型的Python文字列表,例如:

代码语言:javascript
复制
literals = [1, 2, 'a', False]

我所说的“文字”是指任何可以是ast.literal_eval输出的Python对象。我想编写一个函数literalInList来检查literals列表中是否有其他的Python文字x

代码语言:javascript
复制
x = True
if literalInList(x, literals):  # Should be False.
  print('The literal is in the list.')

注意,我不能只做x in literals,因为==in运算符不检查文字类型:

代码语言:javascript
复制
>>> True == 1
True
>>> False == 0
True
>>> 1 == 1.0
True
>>> True in [1, 2, 'a', False]
True

因此,我的最佳尝试如下:

代码语言:javascript
复制
def literalInList(x, literals):
  return any(x is lit for lit in literals)

诚然,对于一个简单的任务来说,这是相当丑陋的。有没有一种更优雅、更高效或更毕达通的方式?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-10 18:52:58

以下几点如何?

代码语言:javascript
复制
def literalInList(x, literals):
  def eq_x(y):
    return x == y and type(x) is type(y)
  return any(eq_x(y) for y in literals)

literals = [1, 2, 'a', False]
print(literalInList(True, literals))   # False
print(literalInList(False, literals))  # True
print(literalInList(1, literals))      # True
print(literalInList(1.0, literals))    # False
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56976737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档