【问题标题】:Combine a list of tuples and list, removing the tuple elements from the list组合元组列表和列表,从列表中删除元组元素
【发布时间】:2012-09-20 05:00:46
【问题描述】:

我有一个元组列表和一个列表: tup = [(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7)] a = [1, 2, 3, 4, 5, 6, 7]

元组实际上是列表 a 的二元组,并且顺序相同。

我必须将这两种结构结合起来,这样: 我得到一个列表:

[(1,2),3,4,5,6,7]
[1,(2,3),4,5,6,7]
[1,2,(3,4),5,6,7]
[1,2,3,(4,5),6,7]

数字没有限制,因此列表可能有重复或不同。 这不是一个家庭作业问题,我正在尝试实现一个需要这个的算法,由于某种原因,我无法想出一个好的方法来做到这一点。

抱歉,我的问题不清楚。

【问题讨论】:

  • 我不确定我是否理解问题所在。元组列表中的元组是否总是出现在列表中的某个位置(如果出现,它们是否总是一起出现)?它们会一直是 2 元组吗?他们会一直井井有条吗?

标签: python algorithm list tuples


【解决方案1】:

你的问题不是很清楚。 一开始我以为你是这个意思

>>> tup = [(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7)]
>>> a = [1, 2, 3, 4, 5, 6, 7]
>>> for i,j in enumerate(tup):
...  print a[:i]+[j]+a[i+2:]
... 
[(1, 2), 3, 4, 5, 6, 7]
[1, (2, 3), 4, 5, 6, 7]
[1, 2, (3, 4), 5, 6, 7]
[1, 2, 3, (4, 5), 6, 7]
[1, 2, 3, 4, (5, 6), 7]
[1, 2, 3, 4, 5, (6, 7)]

但我想到了另一种解释

>>> for i,j in enumerate(tup):
...  print a[:i]+[tuple(a[j[0]-1:j[1]])]+a[i+2:]
... 
[(1, 2), 3, 4, 5, 6, 7]
[1, (2, 3), 4, 5, 6, 7]
[1, 2, (3, 4), 5, 6, 7]
[1, 2, 3, (4, 5), 6, 7]
[1, 2, 3, 4, (5, 6), 7]
[1, 2, 3, 4, 5, (6, 7)]

很遗憾你为tupa 选择了相同的数字,如果它们在一般情况下不同的话

【讨论】:

    【解决方案2】:

    如果我理解您的要求,这应该比大多数其他选项更通用和宽容:

    import bisect
    [a[:bisect.bisect_left(a, lo)] + \
            [(lo, hi)] + \
            a[bisect.bisect_right(a, hi):] for (lo, hi) in tup]
    

    输出是

    [[(1, 2), 3, 4, 5, 6, 7],
     [1, (2, 3), 4, 5, 6, 7],
     [1, 2, (3, 4), 5, 6, 7],
     [1, 2, 3, (4, 5), 6, 7],
     [1, 2, 3, 4, (5, 6), 7],
     [1, 2, 3, 4, 5, (6, 7)]]
    

    【讨论】:

    • 啊,再次阅读问题,看起来数字可能是任意的,您只想将任何值“压缩”在一起,就像 gnibbler 所做的那样。
    猜你喜欢
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 2015-09-14
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多