2013-05-03 40 views
1

我有元组的两个元组的两个元组创建列表:从元组

dCF3t=((((1.90683376789093, -44705.1875), (1.90689635276794, -44706.76171875)),),) 
dU1t=((((0.0, 0.76572), (0.00249999994412065, 0.00782267469912767)),),) 

我需要创建与每个元组的第二列的值的列表:

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

实施例:

dFD=[[0.76572,-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.76572), (0.00249999994412065, 0.00782267469912767))]] 

SOLUTION:

dFD=[] 
    for i in range(0, len(dU1t[0][0])): 
     dFD.append([dU1[0][0][i][1],dCF3[0][0][i][1]]) 
+1

这并不完全清楚,我是你正在尝试做的。你能说一下你想要它在你的例子中返回吗? – azgult 2013-05-03 00:25:10

+0

@azgult:完成!谢谢 – jpcgandre 2013-05-03 00:28:14

回答

1

我怀疑你想是这样的:

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

虽然,您可能想要使用extend ra除非你想让dFD在列表中包含一个列表,否则它不是append

1

这似乎匹配您的例子:

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

我相信你正在寻找

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

在一般情况下,你应该尽量避免附加的东西尽可能;它通常会减慢,因为它可能需要将整个列表复制到内存中的新位置。在你的例子中,append语句本质上是微不足道的,所以它不会真的花费你很多,但它也是完全没有必要的。

1

好吧,这里还有几个问题:

  1. 你“的元组的元组”实际上是元组的元组的元组的元组。分层是相当模糊的,但基本上元组的元组被封装在两层一元元组中。对于这篇文章的其余部分,我将假设变量设置为代替如下:

    dCF3t=(1.90683376789093, -44705.1875), (1.90689635276794, -44706.76171875) 
    dU1t=(0.0, 0.76572), (0.00249999994412065, 0.00782267469912767) 
    

    如果它无法产生他们以这种形式,尝试获得与

    dCF3t = dCF3t[0][0] 
    dU1t = dU1t[0][0] 
    
  2. 排除在外元组
  3. 您应该使用dFD.extend()而不是dFD.append()。 Extend添加传递给它的所有迭代元素,而append只是将它的参数添加到列表中。也就是说,没有必要使用,因为列表一开始是空的。你可以简单地将它直接设置为列表理解。

  4. 列表理解本身是实际发生错误的部分。问题在于你试图在同一列表理解中迭代两个不同的对象;你的目的蟒的zip方法是在这里的理想:

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

在我的例子中,我有'dCF3t =((((1.90683376789093,-44705.1875),(1.90689635276794,-44706.76171875)),),)',你的代码给出了'IndexError:元组索引超出范围'。我可以将'dCF3t'转换为'((((1.90683376789093,-44705.1875),(1.90689635276794,-44706.76171875))))''还是类似的? – jpcgandre 2013-05-03 01:02:40

+0

对不起,当我创建我的答案时,你的帖子有着稍微不同的变量。我现在纠正了它。不过,你的错误意味着你没有在步骤1中更换。可以直接执行此操作,但步骤3中的代码看起来略有不同:对于x,y in zip(dU1t [0] [0],dCF3t [0]),dFD = [(x [1],y [1] ] [0])]' – azgult 2013-05-03 09:57:56