我在
这样的列表中有一个元组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'对象不可迭代
请帮忙。
答案 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]。 我可以帮助你!