繁体   English   中英

在 Python 的列表中添加元组

[英]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)]]

我怎样才能对我的结果设置一些限制? 例如,

  1. 如果结果中的第一个列表没有 (x, y>0),则将 (0, 0) 添加到列表的开头。 (如 out[0][0] 和 out[1][0])。
  2. 如果结果中的第二个列表没有 (x, y>0),则将 (90, 0) 添加到列表的末尾。 (如 out[2][1] 和 out[3][1])

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM