【问题标题】:print first element of tuple if any other element matches in python如果任何其他元素在python中匹配,则打印元组的第一个元素
【发布时间】:2018-02-22 17:38:46
【问题描述】:

我在一个像

这样的列表中有一个元组
A = [(2, 'two', '2nd', 'second')]

我得到一个变量“B”,它可能是列表“A”中除第一个元素之外的其余元素。

例如:

B = ['two'] # or ['2nd'], or ['second']

如果变量“B”与元组“A”匹配,我想打印元组“A”的第一个元素

我试过了

[x for x,y,z,t in a[0] if  b[0] == y or b[0] == z or b[0] == t ]

我遇到了错误。

TypeError: 'int' 对象不可迭代

请帮忙。

【问题讨论】:

    标签: python python-3.x list tuples


    【解决方案1】:

    试试这个

    li = []
    for b in B:
        li += [a[0] for a in A if b in a[1:]]
    

    这将适用于 A 中的 n 个项目和 B 中的 m 个项目。最终输出将是列表 A 中元组的第一个元素,其中至少有一个值与 B 的任何元素匹配

    希望这能解决您的问题

    更新

    简写为

    [a[0] for b in B for a in A if b in a[1:]]
    

    一开始忘记添加了。

    样本输出

    Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
    [GCC 5.4.0 20160609] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
    >>>
    >>> A = [(2, 'two', '2nd', 'second'), (3, 'three', '3rd', 'third')]
    >>> B = ['three']
    >>> [a[0] for b in B for a in A if b in a[1:]]
        [3]
    >>> 
    >>> 
    >>> A = [(2, 'two', '2nd', 'second'), (3, 'three', '3rd', 'third')]
    >>> B = ['two', '3rd']
    >>> [a[0] for b in B for a in A if b in a[1:]]
        [2, 3]
    >>> 
    

    【讨论】:

    • 请不要在您的答案中粘贴屏幕截图。粘贴实际代码(和结果,如果需要)。
    • 即控制台输出(代码的结果),方便更好的理解代码和代码的输出
    • 是的,但您可以将代码作为文本粘贴到代码块中。然后它会更好地为移动用户工作,并且更容易重复使用。
    • 请不要将代码粘贴为图像。您可以在 IDE 中选择代码并粘贴。如果你不知道如何格式化,没关系。有人可以为您做,但请不要使用图片。
    • @Ilkka 有道理,会这样做
    【解决方案2】:

    试试这个单行并使用in 来检查元素退出:-

    A = [(2, 'two', '2nd', 'second')]
    B = ['two']
    print [i[0] for i in A if B[0] in i]
    #[2]
    B = ['two1']
    print [i[0] for i in A if B[0] in i]
    #[]
    

    【讨论】:

    • 为什么需要创建列表?打印?
    【解决方案3】:

    你就快到了——你只需要

    x for x,y,z,t in a
    

    而不是

    x for x,y,z,t in a[0]
    

    【讨论】:

      【解决方案4】:

      如果要打印,请不要使用列表推导。使用简单的 for 循环。

      In [12]: A = [(2, 'two', '2nd', 'second')]
      
      In [13]: B = ['two']
      
      In [14]: for tup in A:
          ...:     if B[0] in tup:
          ...:         print(tup[0])
      

      如果您想要最终列表,请尝试列表理解。您可以索引元组。无需解压整个元组。

      In [15]: [tup[0]
          ...:     for tup in A
          ...:         if B[0] in tup]
      Out[15]: [2]
      

      【讨论】:

        【解决方案5】:

        为什么不

        A = [(2, 'two', '2nd', 'second')]
        B = ['two']
        if B[0] in A[0][1:]:
          print A[0][0]
        

        【讨论】:

        • 完美如果列表(A)只有一个元组。
        • @Rahul 它确实有一个元组“我在列表中有一个元组...”
        【解决方案6】:

        对于 x,y,z,t in a[0] 等于 for x,y,zt,t in 2,对于 x,y,z.t in 'tow',对于 x,y,z,t in '2nd'……,但2是不可迭代的int。你可以尝试其他方法,例如剪切a[0]的第一个元素,而不是判断a[0]是否等于b[0]。 等我帮你!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-16
          • 2015-05-03
          • 1970-01-01
          • 1970-01-01
          • 2022-08-18
          相关资源
          最近更新 更多