【问题标题】:how to test if an integer is in a sub-list in a list如何测试整数是否在列表的子列表中
【发布时间】:2020-03-12 15:35:01
【问题描述】:

我想测试 3 是否是元素的第一个数字(整数或子列表的第一个),如下所示:

lst=[2, [3,6], [4,1,7]]
3 in lst

结果应该是 True 因为 3 是 [3,6] 的第一个元素。

顺便说一句:我的数据集不会像 [3, [3,7]] 那样使我的列表(单独和在子列表中)

【问题讨论】:

  • 你应该展示你自己的尝试。
  • 你尝试了什么,你在哪里失败了?此外,不要将变量称为内置类型(listdicttuple、...)。
  • 您是问如何使其工作,还是哦,我认为这会工作?前面的结果在前面的 cmets 中,而后面的状态你实际上不明白 in 运算符的作用。
  • 你的数据能有子子列表吗?

标签: python


【解决方案1】:

假设没有子子列表:

l=[2, [3,6], [4,1,7]]
first_elements = [i[0] if isinstance(i, list) else i for i in l]  # [2, 3, 4]
print(3 in first_elements)

输出:

True

【讨论】:

  • 这很好,但是对于像l=[2, [3,6], [4,1,7], 5] 这样的列表有问题。 print(5 in first_elements) => 是的。
  • @MarkMeyer 从阅读问题开始,我想说l=[2, [3,6], [4,1,7], 5] 仍应返回 True,但尚不清楚
【解决方案2】:

你可以用一个非常简单的递归函数来做到这一点,比如:

l =[2, [3,6], [4,1,7]]

def inList(l, n):
    if isinstance(l, list):
        return l[0] == n or any(inList(member, n) for member in l[1:])
    else:
        return False

inList(l, 3) # True
inList(l, 9) # False
inList(l, 2) # True

这也具有深入嵌套列表的优势:

l =[2, [3,6], [4,1,[9,[5]], 7]]
inList(l, 5) # True

【讨论】:

  • OP 只希望它返回 True 如果 n 匹配任何列表的第一个元素,而不是任何元素
  • 谢谢@Dan,我什么时候才能知道在喝咖啡之前阅读理解会被打破。
【解决方案3】:

您可以遍历列表,并检查子元素sub 是列表还是整数,并返回您想要的结果:

L = [2, [3,6], [4,1,7]]
num = 2
res = False
for sub in L:
    if isinstance(sub, list):
        if num in sub:
            res = True
            break
    else:
        if num == sub:
            res = True

print(res)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-28
    • 2013-10-17
    • 2019-06-13
    • 1970-01-01
    • 2020-05-14
    • 2011-12-04
    • 2010-09-14
    • 2015-12-15
    相关资源
    最近更新 更多