1

我有两个元组:

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

PS:两个元组都是从元组列表中创建的。

编辑:为了避免,),)在元组的末尾,请考虑:

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]])
4

4 回答 4

3

我相信你正在寻找

dFD=[[x[1],y[1]] for x,y in zip(dU1t[0], dCF3t[0])]

一般来说,你应该尽量避免追加东西;它通常会变慢,因为它可能需要将整个列表复制到内存中的新位置。在您的示例中, append 语句本质上是微不足道的,因此它不会真正花费您太多,但它也完全没有必要。

于 2013-05-03T00:42:53.417 回答
1

我怀疑你想要这样的东西:

dFD.append([x[1] for x in dU1t]+[y[1] for y in dCF3t])

虽然,您可能想要使用extend而不是append除非您希望 dFD 在列表中包含列表。

于 2013-05-03T00:34:40.673 回答
1

这似乎与您的示例相匹配:

dFD = [[x[1], y[1]] for x,y in zip(dU1t[0], dCF3t[0])]
于 2013-05-03T00:41:10.513 回答
1

好吧,这里有几个问题:

  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]
    
  2. 您应该使用dFD.extend()而不是dFD.append(). Extend 添加传递给它的 iterable 的所有元素,而 append 只是将它的参数添加到列表中。也就是说,两者都没有必要使用,因为列表在开始时是空的。您可以简单地将其直接设置为列表理解。

  3. 列表理解本身就是实际出错的部分。问题是您试图在同一个列表理解中迭代两个不同的对象;出于您的目的,python 的zip方法在这里是理想的:

    dFD = [(x[1], y[1]) for x, y in zip(dU1t, dCF3t)]
    
于 2013-05-03T00:43:46.390 回答