将元组列表转换为列表,对其进行修改,然后将其转换回列表



我想写一个函数,其中我想从第二个参数中删除重叠的间隔。参数(元组列表(是整数间隔,例如:[(8,23(]。如果它与第一个参数重叠,则结束,从中删除重叠的间隔。例如:如果第一个参数是[(0,10(],而第二个是[(8,23(],我想将第二个参数更改为[(11,23(]。我试过这样:

def remove_overlapping_products(brand_positions, product_positions):
brand_pos_list = list(brand_positions)
product_pos_list = list(product_positions)

def check_overlap(brand_pos_list, product_pos_list):
if product_pos_list[0]>= brand_pos_list[0] and product_pos_list[0]<= brand_pos_list[1]:
product_pos_list[0] =  brand_pos_list[1]-1
return True
if product_pos_list[1]>= brand_pos_list[0] and product_pos_list[1]<= brand_pos_list[1]:
product_pos_list[1] =  brand_pos_list[0]-1
return True

for x in brand_pos_list:
for y in product_pos_list:
check_overlap(x, y)


product_positions_new = tuple(product_pos_list)                

return [pos for pos in product_positions_new]

但我收到了错误信息:"'元组"对象不支持项分配";。由于我使用了转换后的列表,我无法理解此消息的原因。

有人能帮我写代码吗?

如果只想更改第二个参数,它可以是一个较短的解决方案:

def check_overlap(x,y):
return True if x[1]>=y[0] else False

def remove_overlap(brand_positions, product_positions):
return [(x[1]+1, y[1]) if (check_overlap(x, y) and x[1]<y[1]) else y for (x, y) in zip(brand_positions, product_positions)]

示例:

X = [(0,10), (2,5), (6,9)]
Y = [(8,23), (5,7), (1,7)]
print(remove_overlap(X,Y))

输出:

[(11, 23), (6, 7), (1, 7)]

最新更新