如果任何其他元素在python中匹配,则打印元组的第一个元素

时间:2018-02-22 04:52:14

标签: python python-3.x list tuples

我在

这样的列表中有一个元组
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'对象不可迭代

请帮忙。

6 个答案:

答案 0 :(得分:1)

试试这个

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

这将适用于B中A和m个项目中的n个项目。最终输出将是列表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]
>>> 

答案 1 :(得分:0)

尝试使用此单线程并使用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]
#[]

答案 2 :(得分:0)

你快到了 - 你只需要

x for x,y,z,t in a

而不是

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

答案 3 :(得分:0)

为什么不

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

答案 4 :(得分:0)

如果要打印,请不要使用列表解析。使用简单的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 :(得分:-1)

对于x,y,z,t在[0]中等于x,y,zt,t在2中,对于x,y,zt在&#39; tow&#39;中对于x,y ,z,t在&#39; 2nd&#39; ......中,但是2是int,它是不可迭代的。你可以尝试其他方式,如切割[0]的第一个元素,而不是判断[0]是否为0等于b [0]。 我可以帮助你!