【问题标题】:Iterate over tuples in python and compare them with constraints迭代python中的元组并将它们与约束进行比较
【发布时间】:2017-04-30 16:27:48
【问题描述】:

我有一个这样的元组列表:

myList = [(0, 0, 0, 0),
          (0, 0, 0, 1),
          (0, 0, 1, 0),
          (0, 1, 0, 0),
          (0, 1, 0, 1), 
          (1, 0, 1, 0), 
          (1, 0, 1, 1), 
          (1, 1, 0, 1), 
          (1, 1, 1, 0), 
          (1, 1, 1, 1)]

我想遍历元组并将每个元组与每个其他元组进行比较,如果第一个元素发生变化并且最多另一个元素也发生变化,则返回 true;否则返回假。

例如:

cmp((0, 0, 0, 0), (0, 0, 0, 1)) -> false, the first element did not change  
cmp((0, 0, 1, 0), (1, 0, 1, 0)) -> true, the first element changed  
cmp((0, 0, 0, 0), (1, 0, 1, 0)) -> true, the first element and only one other changed  
cmp((0, 0, 0, 0), (1, 1, 1, 0)) -> false, too many elements changed

编辑:感谢 heyu91 我解决了 我使用的最终代码是这样的

G=Graph()
G.add_vertices(myList)
for x in myList:
    for y in myList:
        if x!=y and (x[0]!=y[0]) and (sum((x[1]!=y[1], x[2]!=y[2], x[3]!=y[3]))<=1):
            G.add_edge(x,y)

【问题讨论】:

  • "返回 true"??该动词在这种情况下没有意义。
  • 为了扩展@KarolyHorvath 的评论,听起来你想做两件不同的事情:(1)遍历所有对; (2) 调用比较两个元组并返回布尔值的函数。是吗?
  • 如果您显示您目前拥有的代码会更好。目的是什么并不完全清楚。您是否尝试在列表中查找重复的元组?
  • 一种方法是使用scipy.spatial.distance.hamming 查找不同元组条目的数量,并额外检查第一个条目是否不同。

标签: python tuples


【解决方案1】:

我不知道输出的格式,所以我返回一个元组列表,如下所示:

[(x, y, (x[0]!=y[0]) and (sum((x[1]!=y[1], x[2]!=y[2], x[3]!=y[3]))<=1)) \ for x in myList \ for y in myList \ if x!=y]

返回:

[((0, 0, 0, 0), (0, 0, 0, 1), False),
 ((0, 0, 0, 0), (0, 0, 1, 0), False),
 ((0, 0, 0, 0), (0, 1, 0, 0), False),
 ((0, 0, 0, 0), (0, 1, 0, 1), False),
 ((0, 0, 0, 0), (1, 0, 1, 0), True),
 ((0, 0, 0, 0), (1, 0, 1, 1), False),
 ((0, 0, 0, 0), (1, 1, 0, 1), False),
 ((0, 0, 0, 0), (1, 1, 1, 0), False),
 ((0, 0, 0, 0), (1, 1, 1, 1), False),
 ((0, 0, 0, 1), (0, 0, 0, 0), False),
 ((0, 0, 0, 1), (0, 0, 1, 0), False),
 ((0, 0, 0, 1), (0, 1, 0, 0), False),
 ((0, 0, 0, 1), (0, 1, 0, 1), False),
 ((0, 0, 0, 1), (1, 0, 1, 0), False),
 ((0, 0, 0, 1), (1, 0, 1, 1), True),
 ((0, 0, 0, 1), (1, 1, 0, 1), True),
 ((0, 0, 0, 1), (1, 1, 1, 0), False),
 ((0, 0, 0, 1), (1, 1, 1, 1), False),
 ((0, 0, 1, 0), (0, 0, 0, 0), False),
 ((0, 0, 1, 0), (0, 0, 0, 1), False),
 ((0, 0, 1, 0), (0, 1, 0, 0), False),
 ((0, 0, 1, 0), (0, 1, 0, 1), False),
 ((0, 0, 1, 0), (1, 0, 1, 0), True),
 ((0, 0, 1, 0), (1, 0, 1, 1), True),
 ((0, 0, 1, 0), (1, 1, 0, 1), False),
 ((0, 0, 1, 0), (1, 1, 1, 0), True),
 ((0, 0, 1, 0), (1, 1, 1, 1), False),
 ((0, 1, 0, 0), (0, 0, 0, 0), False),
 ((0, 1, 0, 0), (0, 0, 0, 1), False),
 ((0, 1, 0, 0), (0, 0, 1, 0), False),
 ((0, 1, 0, 0), (0, 1, 0, 1), False),
 ((0, 1, 0, 0), (1, 0, 1, 0), False),
 ((0, 1, 0, 0), (1, 0, 1, 1), False),
 ((0, 1, 0, 0), (1, 1, 0, 1), True),
 ((0, 1, 0, 0), (1, 1, 1, 0), True),
 ((0, 1, 0, 0), (1, 1, 1, 1), False),
 ((0, 1, 0, 1), (0, 0, 0, 0), False),
 ((0, 1, 0, 1), (0, 0, 0, 1), False),
 ((0, 1, 0, 1), (0, 0, 1, 0), False),
 ((0, 1, 0, 1), (0, 1, 0, 0), False),
 ((0, 1, 0, 1), (1, 0, 1, 0), False),
 ((0, 1, 0, 1), (1, 0, 1, 1), False),
 ((0, 1, 0, 1), (1, 1, 0, 1), True),
 ((0, 1, 0, 1), (1, 1, 1, 0), False),
 ((0, 1, 0, 1), (1, 1, 1, 1), True),
 ((1, 0, 1, 0), (0, 0, 0, 0), True),
 ((1, 0, 1, 0), (0, 0, 0, 1), False),
 ((1, 0, 1, 0), (0, 0, 1, 0), True),
 ((1, 0, 1, 0), (0, 1, 0, 0), False),
 ((1, 0, 1, 0), (0, 1, 0, 1), False),
 ((1, 0, 1, 0), (1, 0, 1, 1), False),
 ((1, 0, 1, 0), (1, 1, 0, 1), False),
 ((1, 0, 1, 0), (1, 1, 1, 0), False),
 ((1, 0, 1, 0), (1, 1, 1, 1), False),
 ((1, 0, 1, 1), (0, 0, 0, 0), False),
 ((1, 0, 1, 1), (0, 0, 0, 1), True),
 ((1, 0, 1, 1), (0, 0, 1, 0), True),
 ((1, 0, 1, 1), (0, 1, 0, 0), False),
 ((1, 0, 1, 1), (0, 1, 0, 1), False),
 ((1, 0, 1, 1), (1, 0, 1, 0), False),
 ((1, 0, 1, 1), (1, 1, 0, 1), False),
 ((1, 0, 1, 1), (1, 1, 1, 0), False),
 ((1, 0, 1, 1), (1, 1, 1, 1), False),
 ((1, 1, 0, 1), (0, 0, 0, 0), False),
 ((1, 1, 0, 1), (0, 0, 0, 1), True),
 ((1, 1, 0, 1), (0, 0, 1, 0), False),
 ((1, 1, 0, 1), (0, 1, 0, 0), True),
 ((1, 1, 0, 1), (0, 1, 0, 1), True),
 ((1, 1, 0, 1), (1, 0, 1, 0), False),
 ((1, 1, 0, 1), (1, 0, 1, 1), False),
 ((1, 1, 0, 1), (1, 1, 1, 0), False),
 ((1, 1, 0, 1), (1, 1, 1, 1), False),
 ((1, 1, 1, 0), (0, 0, 0, 0), False),
 ((1, 1, 1, 0), (0, 0, 0, 1), False),
 ((1, 1, 1, 0), (0, 0, 1, 0), True),
 ((1, 1, 1, 0), (0, 1, 0, 0), True),
 ((1, 1, 1, 0), (0, 1, 0, 1), False),
 ((1, 1, 1, 0), (1, 0, 1, 0), False),
 ((1, 1, 1, 0), (1, 0, 1, 1), False),
 ((1, 1, 1, 0), (1, 1, 0, 1), False),
 ((1, 1, 1, 0), (1, 1, 1, 1), False),
 ((1, 1, 1, 1), (0, 0, 0, 0), False),
 ((1, 1, 1, 1), (0, 0, 0, 1), False),
 ((1, 1, 1, 1), (0, 0, 1, 0), False),
 ((1, 1, 1, 1), (0, 1, 0, 0), False),
 ((1, 1, 1, 1), (0, 1, 0, 1), True),
 ((1, 1, 1, 1), (1, 0, 1, 0), False),
 ((1, 1, 1, 1), (1, 0, 1, 1), False),
 ((1, 1, 1, 1), (1, 1, 0, 1), False),
 ((1, 1, 1, 1), (1, 1, 1, 0), False)]

【讨论】:

  • 嗨,太好了,由于某种原因,我没有想出一个简单的方法来完成这部分"(sum((x[1]!=y[1], x[2] !=y[2], x[3]!=y[3]))
  • 也许(sum(x[i]!=y[i] for i in range(1, len(x)))&lt;=1) 是一种更通用的方式。
猜你喜欢
  • 2020-07-20
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 2016-09-09
  • 1970-01-01
  • 2022-11-15
相关资源
最近更新 更多