【问题标题】:Find nearest index of non occurrence of the elements of the tuple in python在python中查找未出现元组元素的最近索引
【发布时间】:2017-06-13 06:24:23
【问题描述】:

R=[(1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (2, 3), (2, 4), (2 , 5), (2, 6), (3, 4), (3, 5), (3, 6), (4, 5), (4, 6), (5, 6)]

从上面的 LIST R 中,我需要为其未出现的任何元素的每个元组找到最近的索引。我的意思是没有元组的值是相同的。而且这个元组的顺序也是固定的。

最后,当我们组合三个元组时,我们应该拥有所有源元素 (1,2,3,4,5,6)

预期输出:

对于 0: (0 , 9 , 14): (1,2) (3,4) (5,6) 对于 1: (1 , 6 , 14): (1,3) (2,4) (5,6) . . . . 对于 4:( 4 , 2 , 12): (1,2) (3,4) (5,6) . . .等等

请帮助...谢谢。

我尝试过的东西太大了,我自己对此并不满意

for j in range(i+1,i+10):
    b=set(Results[j])
    if (len(a&b)==0):

        for k in range(i+10, i+200):
            c=set(Results[k])
            if ( (len(a&c)==0) and (len(b&c)==0) ):

                for l in range(i+200, i+600):
                    d=set(Results[l])
                    if ( (len(a&d)==0) and (len(b&d)==0)  and (len(c&d)==0) ):

【问题讨论】:

  • 请贴出您尝试过的代码。这不是一个好问题。
  • for j in range(i+1,i+10): b=set(Results[j]) if (len(a&b)==0): for k in range(i+10) , i+200): c=set(Results[k]) if ( (len(a&c)==0) and (len(b&c)==0) ): for l in range(i+200, i+600 ): d=set(Results[l]) if ( (len(a&d)==0) and (len(b&d)==0) and (len(c&d)==0) ):
  • 我的那个太大了,我想以优化的方式寻找一些东西……简短而整洁,这就是为什么我不想发表我的观点……在这里。对此感到抱歉
  • 使用您拥有的代码编辑问题。如果您有一些有用的东西,但想询问优化,那么这也是一个有效的问题。但是我们需要看看你已经尝试过什么,并且格式正确。 Python 代码尤其不适合 cmets 中缺少空格格式。
  • 哦,好吧...我刚刚更新了代码,它真的很大,我不知道如何传递所有数据和所有东西,所以我只是给出了一些我的问题的缩影,这就是为什么我没有发布我的代码

标签: python templates indexing tuples elements


【解决方案1】:

这消除了您的嵌套循环之一。我不知道您从哪里获得 i 值,也不知道您为什么在内部循环中使用如此大的范围。

R = [(1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (2, 3), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6), (4, 5), (4, 6), (5, 6)]
# keep track of the indices where tuple elements are disjoint
matches = {}
# loop over R
for index in range(len(R)):
  # track the elements seen so far
  elements = set(R[index])
  # track the index where elements were seen
  matches[index] = [index]
  # loop over subsequent items
  for _index in range(index, len(R)):
    # if the tuple has all items not already seen, record it
    if elements.isdisjoint(set(R[_index])):
      elements = elements.union(R[_index])
      matches[index] += [_index]
# discard anything that does not have all six items
final_matches = {k: v for k, v in matches.viewitems() if len(v) == 3}

【讨论】:

  • 哇...完全没问题,我只是在最后一行将matches.viewitems() 更改为matches.items() 可能是由于版本冲突或其他原因。但是,它运行良好且完美。非常感谢您的闪电般的回应和感谢的声音。
  • 兄弟...类似但略有变化请帮助 R=[(1,10,14,34),(2,5,19,21),(3,7,31 ,32),(1,9,12,31),(2,10,11‌​,22),(4,8,14,32),(13‌​,15,19,34),(1,5 ,15,2‌​0),(3,26,19,25),(4,1‌​7,19,21),(4,1‌​7,20,21)] 对于 R 中的每个元组,找到具有相同元素位置的每个元素的下一个索引,其中其他元素不应出现在两个元组中。 FOR 索引 0 和 1 这里是预期的样本结果 0: 4,5,6,7 1: 2,5,6,8 。 . . . .等等或在这里查看我的帖子stackoverflow.com/questions/44558290/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-05
  • 2021-11-07
  • 2018-10-17
  • 1970-01-01
  • 2019-01-12
  • 2021-07-02
相关资源
最近更新 更多