首先感谢您看到这个问题,并且请,这是解决此问题的简单方法。 我有两个列表,我称之为v1和v2,它们有不同的范围:
250-1100和900 1700
我想在900-950范围内切片。因此,他们应该将他们的劣质部分切成最小值为900,并将上部切成最大值为950.
注意:v1和v2用双索引[i] [0]引用,因为它们是数据对,我用第一个值切割列表(它们实际上是{x,y}对)。 / p>
我有这个方法,我用来处理它:
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范围进行切片,当我将一个列表的边缘与另一个列表的边缘匹配时,它会删除多余的值。
答案 0 :(得分:1)
您需要输入和输出所需的具体示例,但我认为您需要列表理解。例如,这将返回v1
中的值,其中该对的第一个元素在900-950范围内。
[pair for pair in v1 if 900 <= pair[0] <= 950]
答案 1 :(得分:1)
如果您的目标是根据元素的某些部分(例如element[0]
)的值提取元素的子范围,请执行以下操作:
sublist1 = list(filter((lambda elt: 900 <= elt[0] <= 950), v1))
同样适用于v2
。
答案 2 :(得分:1)
我想这会解决问题:
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]]
v3 = v1+v2
v3.sort(key=lambda x: x[0])
final_list = [x for x in v3 if x[0]>900 and x[0]<950]
print(final_list)
1)要合并两个列表,只需添加它们就是最好的方法
list3 = list1 + list2
2)通过将键指定为列表的第一个元素
来对列表进行排序list_name.sort(key = lambda x:x [0])
3)列表理解。
[x,如果x [0]> 900且x [0] <950]则v3中的x
如果x [0](列表列表的第一个元素)大于900且小于950,则在v3(列表列表)中为每个x(此处为列表)存储x。