我有两个元组元组:
dCF3t=((((1.90683376789093, -44705.1875), (1.90689635276794, -44706.76171875)),),)
dU1t=((((0.0, 0.00244894321076572), (0.00249999994412065, 0.00782267469912767)),),)
我需要创建一个列表,其中包含每个元组的第二列的值:
dFD=[]
dFD.append([x[1] for x in dU1t, y[1] for y in dCF3t])
示例:
dFD=[[0.00244894321076572,-44705.1875],[0.00782267469912767,-44706.76171875]]
但它给了我这个错误:name 'y' is not defined
P.S。:两个元组都是从元组列表列表中创建的。
编辑:
要避免元组末尾的,),)
,请考虑:
dCF3t=[[((1.90683376789093, -44705.1875), (1.90689635276794, -44706.76171875))]]
dU1t=[[((0.0, 0.00244894321076572), (0.00249999994412065, 0.00782267469912767))]]
解决方案:
dFD=[]
for i in range(0, len(dU1t[0][0])):
dFD.append([dU1[0][0][i][1],dCF3[0][0][i][1]])
答案 0 :(得分:3)
我相信你正在寻找
dFD=[[x[1],y[1]] for x,y in zip(dU1t[0], dCF3t[0])]
一般来说,你应尽量避免追加事物;它通常会变慢,因为它可能需要将整个列表复制到内存中的新位置。在你的例子中,append语句基本上是微不足道的,所以它不会花费你太多,但它也是完全没必要的。
答案 1 :(得分:1)
我怀疑你想要这样的东西:
dFD.append([x[1] for x in dU1t]+[y[1] for y in dCF3t])
虽然您可能希望使用extend
而不是append
,除非您希望dFD在列表中包含列表。
答案 2 :(得分:1)
这似乎符合你的例子:
dFD = [[x[1], y[1]] for x,y in zip(dU1t[0], dCF3t[0])]
答案 3 :(得分:1)
好吧,这里有几个问题:
你的“元组元组”实际上是元组元组元组的元组。分层是相当模糊的,但基本上元组的元组被封装在两层单元素元组中。对于本文的其余部分,我将假设变量设置如下:
dCF3t=(1.90683376789093, -44705.1875), (1.90689635276794, -44706.76171875)
dU1t=(0.0, 0.00244894321076572), (0.00249999994412065, 0.00782267469912767)
如果无法以此形式生成它们,请尝试使用
删除外部元组dCF3t = dCF3t[0][0]
dU1t = dU1t[0][0]
您应该使用dFD.extend()
代替dFD.append()
。 Extend添加传递给它的iterable的所有元素,而append只是将它的参数添加到列表中。也就是说,没有必要使用任何一个,因为列表在开始时是空的。您可以直接将其设置为列表理解。
列表理解本身就是实际错误的部分。问题是你试图在同一个列表理解中迭代两个不同的对象;为了您的目的,python的zip方法在这里是理想的:
dFD = [(x[1], y[1]) for x, y in zip(dU1t, dCF3t)]