There are two issues that need attention.
The source code generates an error:
>>> first_lst = [('-2.50', 0.49, 0.52), ('-2.00', 0.52, 0.50)] >>> second_lst = [('-2.50', '1.91', '2.03'), ('-2.00', '1.83', '2.08')] >>> [((fir[0], float(fir[1])*float(sec[1]), float(fir[2])*float(sec[2])) for fir in first_lst) for sec in second_lst if fir[0] == sec[0]] Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 1, in <listcomp> NameError: name 'fir' is not defined >>>
and <generator object <genexpr> .
1). Correct the code with as few changes as possible by creating a list comprehension :
>>> first_lst = [('-2.50', 0.49, 0.52), ('-2.00', 0.52, 0.50)] >>> second_lst = [('-2.50', '1.91', '2.03'), ('-2.00', '1.83', '2.08')] >>> [(fir[0],fir[1]*float(sec[1]),fir[2]*float(sec[2])) for fir in first_lst for sec in second_lst if fir[0] == sec[0]] # list comprehension [('-2.50', 0.9359, 1.0555999999999999), ('-2.00', 0.9516000000000001, 1.04)] >>>
2) In the source code, the bracket after first_lst ) inappropriate. If we place this bracket after sec[0] instead of understanding the list, we get an expression. And this will call the <generator object <genexpr> :
>>> [((fir[0],fir[1]*float(sec[1]),fir[2]*float(sec[2])) for fir in first_lst for sec in second_lst if fir[0] == sec[0])] # generator object [<generator object <genexpr> at 0x00000184EEDE29E8>]
In terms of syntax, the only difference is that brackets are used instead of square brackets.
Note. If necessary, there are two ways to convert the generator object to a list:
2a) Use the asterisk operator (*) to unpack an object into a list
>>> [*((fir[0],fir[1]*float(sec[1]),fir[2]*float(sec[2])) for fir in first_lst for sec in second_lst if fir[0] == sec[0])] [('-2.50', 0.9359, 1.0555999999999999), ('-2.00', 0.9516000000000001, 1.04)] >>>
2b) Use explicitly list()
>>> list((fir[0],fir[1]*float(sec[1]),fir[2]*float(sec[2])) for fir in first_lst for sec in second_lst if fir[0] == sec[0]) [('-2.50', 0.9359, 1.0555999999999999), ('-2.00', 0.9516000000000001, 1.04)] >>>