迭代两个2D列表以创建匹配事件的2D列表

时间:2016-10-21 14:16:06

标签: python list multidimensional-array

我一直在努力寻找解决方案,但却无法实现!我确信有一种简单的方法可以做我不知道的事情。

我有两个2D列表, a b (下面的示例)。您可以看到,对于大多数值,每个A列表中的位置[1]与B列表中的位置[0]匹配(例如列表中的5158648.0 a 3匹配列表中的5158648.0 b 3) - 我已在下面的列表中将匹配项设置为粗体

换句话说,B是一个有点长的序列,A是相同的序列,但只有一定的B值。

  

a = [[1000002.0,0],[1000004.0,1000002.0],[5158670.0, 5158648.0 ],[5158261.0, 5159627.0 ],[5155371.0, 5158256.0 ],[5258673.0, 5158648.0 ]]

     

b = [[1000004.0,' TF'],[1000005.0,' TF'],[ 5158648.0 ,' FT' ],[5158670.0,' FT'],[5387625.0,' FT'],[5158624.0,' FT'],[5158623.0,' FT&# 39;],[5158668.0,' FT'],[5158589.0,' FT'],[5158641.0,' FT'],[5158640.0,' FT'],[ 5159627 .0,' FT'],[5158261.0,' FT'],[5158664.0,' TF&# 39;],[5158293.0,' TF'],[5158291.0,' TF'],[5158289.0,' TF'],[5158274.0,' TF'],[5158258.0,' TF'],[5158272.0,' TF'],[5158270.0,' TF'],[5158287.0,&# 39; TF'],[ 5158256.0 ,' TF'],[ 5158648.0 ,' TF']]

我想做的是获取TF / FT'从B到A的正确位置

这对于字典来说很容易,但是并发症是一个值(例如5158648.0)可能在序列中的不同位置都有两个值(' FT'在一个点,然后' TF'进一步向下)...所以,我需要按照它所拥有的顺序在这个位置说" ' FT'但是在序列中的另一个位置它有' TF ' - 参见上面的示例,其中5158648.0是FT和TF。

有谁知道实现这一目标的最佳方法?所需的最终产品如下:

  

c = [[1000002.0,0,' N / A'],[1000004.0,1000002.0,' N / A'],[5158670.0, 5158648.0 ,' FT '],[5158261.0, 5159627.0 ,' FT '], [5155371.0, 5158256.0 ,' TF '],[5258673.0, 5158648.0 ,' TF' ]

请注意,某些值(此处为' 0'和' 1000002.0')根本不会出现在b中,因此我需要考虑这些值。

我尝试将列表放到舞台上,其中我有2个相同长度的匹配值列表,然后通过zip()运行以传输值,但是棘手的一点就是修改列表以获得那些2相同的列表,特别是2D方面。

谢谢!

P.S。在上下文有用的情况下 - 每个号码都是街道ID,并且' FT' TF'是一个旅行方向(因此它可能是一个值或另一个 - 它取决于它的旅行方式)

1 个答案:

答案 0 :(得分:0)

我希望我理解你要做的事情。据我所知,'a'确定序列,'b'中唯一重要的顺序是在同一值的'ft'和'tf'值之间。因此,我会使用一个dict,按顺序列出可用值列表(在你的问题中,你提示你控制'b'的样子):

b = {[1000004.0: ['TF'], [1000005.0: ['TF'], 158648.0: ['FT','TF'], 
      158670.0: ['FT'], 387625.0: ['FT'], 158624.0: ['FT'], 158623.0: ['FT'], 
      158668.0: ['FT'], 158589.0: ['FT'], 158641.0: ['FT'], 158640.0: ['FT'], 
      159627.0: ['FT'], 158261.0: ['FT'], 158664.0: ['TF'], 158293.0: ['TF'], 
      158291.0: ['TF'], 158289.0: ['TF'], 158274.0: ['TF'], 158258.0: ['TF'], 
      158272.0: ['TF'], 158270.0: ['TF'], 158287.0: ['TF'], 158256.0: ['TF']}

然后你需要:

for x,y in a:
    try:
       c.append((x,y,b[y][0]))
       b[y].pop(0)
    except (IndexError,KeyError):
       c.append((x,y,'NA'))