[英]Adding tuples in lists in Python
我有元组列表,当元组 = (x, y=-1) 时,我将每个列表分成两部分
这是代码:
testList = [
[(0.0, -1.0), (0.5, -0.002), (2.0, -0.1613676), (2.5, 1.08492417852)],
[(0.0, -0.99604032), (0.5, -1.0), (2.0, -0.1613832766676), (2.5, 1.0849852)],
[(4.5, 0.154484), (5.0, -1.0), (5.5, -0.34), (6.0, -0.44)],
[(88.5, 3127.7763767), (89.0, 13.449714), (90.0, -1.0)]]
def c_slice(lst):
for slst in lst:
start = 0
for idx,(_,y) in enumerate(slst):
if y == -1:
yield [slst[start:idx+1], slst[idx:]]
break
out = list(c_slice(testList))
print(out[0])
# [[(0.0, -1.0)], [(0.0, -1.0), (0.5, -0.002), (2.0, -0.1613676), (2.5, 1.08492417852)]]
print(out[1])
# [[(0.0, -0.99604032), (0.5, -1.0)], [(0.5, -1.0), (2.0, -0.1613832766676), (2.5, 1.0849852)]]
print(out[2])
# [[(4.5, 0.154484), (5.0, -1.0)], [(5.0, -1.0), (5.5, -0.34), (6.0, -0.44)]]
print(out[3])
# [[(88.5, 3127.7763767), (89.0, 13.449714), (90.0, -1.0)], [(90.0, -1.0)]]
我怎样才能对我的结果设置一些限制? 例如,
ps 添加元组的position是基于x坐标的。 例如,(0, 0) 有最小的 x,所以它总是被添加到列表的开头。 相反, (90, 0) 具有最大的 x 坐标,所以它总是被添加到列表的最后。
我试图得到这个:
print(out[0])
# [[(0.0, 0.0), (0.0, -1.0)], [(0.0, -1.0), (0.5, -0.002), (2.0, -0.1613676), (2.5, 1.08492417852)]]
print(out[1])
# [[(0.0, 0.0), (0.0, -0.99604032), (0.5, -1.0)], [(0.5, -1.0), (2.0, -0.1613832766676), (2.5, 1.0849852)]]
print(out[2])
# [[(4.5, 0.154484), (5.0, -1.0)], [(5.0, -1.0), (5.5, -0.34), (6.0, -0.44), (90.0, 0.0)]]
print(out[3])
# [[(88.5, 3127.7763767), (89.0, 13.449714), (90.0, -1.0)], [(90.0, -1.0), (90.0, 0.0)]]
你可以试试这样
testList = [
[(0.0, -1.0), (0.5, -0.002), (2.0, -0.1613676), (2.5, 1.08492417852)],
[(0.0, -0.99604032), (0.5, -1.0), (2.0, -0.1613832766676), (2.5, 1.0849852)],
[(4.5, 0.154484), (5.0, -1.0), (5.5, -0.34), (6.0, -0.44)],
[(88.5, 3127.7763767), (89.0, 13.449714), (90.0, -1.0)]
]
def c_slice(rows):
for row in rows:
for idx, (_, y) in enumerate(row):
if y == -1:
start = row[:idx + 1]
end = row[idx:]
start = [(0, 0)] + start if all([y < 0 for _, y in start]) else start
end = end + [(90, 0)] if all([y < 0 for _, y in end]) else end
yield [start, end]
break
out = list(c_slice(testList))
for i in out:
print(i)
我编写了这个解决方案:
testList = [
[(0.0, -1.0), (0.5, -0.002), (2.0, -0.1613676), (2.5, 1.08492417852)],
[(0.0, -0.99604032), (0.5, -1.0), (2.0, -0.1613832766676), (2.5, 1.0849852)],
[(4.5, 0.154484), (5.0, -1.0), (5.5, -0.34), (6.0, -0.44)],
[(88.5, 3127.7763767), (89.0, 13.449714), (90.0, -1.0)]]
def c_slice(lst):
for slst in lst:
start = 0
for idx,(x,y) in enumerate(slst):
if y == -1:
if x <= len(slst)/2:
yield [[(x, 0)] + slst[start:idx+1], slst[idx:]]
else:
yield [slst[start:idx+1] + [(x, 0)], slst[idx:]]
break
out = list(c_slice(testList))
print(out[0])
print(out[1])
print(out[2])
print(out[3])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.