【发布时间】:2017-10-22 11:11:31
【问题描述】:
首先感谢您看到这个问题,请一定有更简单的方法来解决这个问题。 我有两个列表,我称之为 v1 和 v2,它们有不同的范围:
250-1100 和 900 1700
我想在 900-950 的范围内对它们进行切片。所以他们俩,应该把他们的下半部分切到最小值为900,上部分切到最大值为950。
注意:v1 和 v2 被双索引 [i][0] 引用,因为它们是数据对,我按第一个值对列表进行切片(它们实际上是 {x,y} 对)。
我有这个方法用来处理它:
def corte(v1, v2):
for i in range(len(v1)):
if i == 0 and v1[0][0] == v2[0][0]:
break
if v1[i][0] >= v2[0][0]:
v1 = v1[i:]
break
if i == len(v2) and v1[-1][0] == v2[-1][0]:
return v1, v2
if v1[-1][0] > v2[-1][0]:
i = len(v1)
while i > 0:
i -= 1
if v1[i - 1][0] <= v2[-1][0]:
v1 = v1[:i]
break
else:
i = len(v2)
while i > 0:
i -= 1
if v2[i - 1][0] <= v1[-1][0]:
v2 = v2[:i + 1]
break
return v1, v2
我最大的问题是处理这个范围的东西。我知道这太难理解了,而且这个问题似乎有点令人困惑,所以我要问的是一些建议,也许是你认为我应该尝试改进的任何方法。
示例:
V1=[[899.1,0],[900,0],[900.1,0],[920.0,0],[949.1,0],[950.1,0]]
v2=[[935,0],[945,0],[955,0]]
将返回 v=[900,0],[900.1,0],[920.0,0],[935,0],[945,0],[949.1,0]
第二个元素与问题无关。
编辑:实际上这段代码并没有将其切片到 900-950 范围内,当我将一个列表的边缘与另一个匹配时,它会删除多余的值。
【问题讨论】:
-
您能发布一个示例输入和您想要的输出吗?
-
这可能更适合code-review。不过,请阅读他们的on-topic 页面以确保。
-
您需要更好地解释自己。列表的“范围”是什么意思?没有这样的事情。这些值是否在列表列中?如果您的值是“实际上是 {x, y} 对”,那么您的代码到底与此有什么关系?你为什么要相互比较这些列表?看你的问题,这没有任何意义。
-
更好:制作一个玩具示例来封装您所询问的内容。省略额外的索引、
{x, y}对等。 -
我会看到有关放置示例输出的信息。我做了一个测试程序来做到这一点
标签: python list indexing slice