【问题标题】:Python: sorting and appending list without changing orderPython:排序和追加列表而不改变顺序
【发布时间】:2020-07-03 15:33:04
【问题描述】:

我有两个列表,比如说:

[[37.1, -122.1], [37.2,-122.2], [37.3,-122.3]]

&

[[37.3, -122.3], [38.1,-123.1], [38.2,-123.2]]

我需要检查该 lats/lngs 列表中的 first OR last 项是否与另一个 first OR last 对相同。

在这种情况下,第一个列表的最后一对 [37.3,-122.3] 等于第二个列表的第一对。

我需要将第二个列表附加到第一个列表中,不包括第一个 lat/lng 对,而不更改第二个列表的顺序,除非结果与编辑版本中的结果类似。

这很重要,因为它形成了一条要在地图上绘制的线。

最终结果是:

[[37.1, -122.1], [37.2,-122.2], [37.3, -122.3], [38.1,-123.1], [38.2,-123.2]]

这需要是一种可扩展的方法,因为我有很多需要相互依赖的方法。

编辑

我得到的答案很好,但它必须只检查第一个或最后一个,如果结果是 list2[-1] == list1[0],它必须颠倒顺序

另一个例子。

[[37.1, -122.1], [37.2,-122.2], [37.3,-122.3]]

&

[[37.3, -122.3], [38.1,-123.1], [38.2,-123.2]]

&

[[37.1, -122.1], [39.1,-124.1], [39.2,-124.2]]

在这种情况下,结果列表将是

[[39.2,-124.2], [39.1,-124.1], [37.1, -122.1], [37.2,-122.2], [37.3,-122.3], [38.1,-123.1], [38.2,-123.2]]

【问题讨论】:

  • 如果只有这两个列表,我喜欢这两个解决方案,但我有一个包含几十个列表的列表,它必须检查每个列表中的匹配项。

标签: python sorting mapping


【解决方案1】:

您可以使用if 声明:

line1 = [[37.1, -122.1], [37.2,-122.2], [37.3,-122.3]]
line2 = [[37.3, -122.3], [38.1,-123.1], [38.2,-123.2]]

result = [] # in case that first/last do not match
if line1[-1] == line2[0]:
    result = line1 + line2[1:]
elif line2[-1] == line1[0]:
    result = line2 + line1[1:]

print(result)

输出:

[[37.1, -122.1], [37.2, -122.2], [37.3, -122.3], [38.1, -123.1], [38.2, -123.2]]

【讨论】:

  • 您好,感谢您的回答,不幸的是,这不起作用。检查编辑以进行澄清。谢谢你:)
【解决方案2】:

试试这个:

list_1 = [[37.1, -122.1], [37.2,-122.2], [37.3,-122.3]]
list_2 = [[37.3, -122.3], [38.1,-123.1], [38.2,-123.2]]

for i in list_2:
    if i not in list_1:
        list_1.append(i)

print(list_1)

>>> [[37.1, -122.1], [37.2, -122.2], [37.3, -122.3], [38.1, -123.1], [38.2, -123.2]]

【讨论】:

  • 这行不通,因为中间的可能是一样的,这会搞砸。顺序必须保持不变,整个列表必须以相同的顺序附加。
猜你喜欢
  • 2016-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-16
  • 2023-01-09
  • 2015-12-09
  • 1970-01-01
  • 2013-06-12
相关资源
最近更新 更多