比较列表中的每个元素

时间:2015-10-22 23:24:26

标签: python list tuples

是否可以匹配两个元组,逐个比较每个元素,并确定更改发生的位置。

注意: runA和runB输出在循环中,因此它意味着它不是硬编码的。 runA和runB可以是范围tool01到tool100或tool01 only等,具体取决于循环结果到我的查询。只是简单的工具在for循环中,因此工具no可以更多或更少。

输出#1的示例结果:

runA = [(u'tool01', '21'), (u'tool02', '22'), (u'tool03', '23')]

runB = [(u'tool01', '21'), (u'tool02', '22'), (u'tool03', '22')]

预期结果#1:

print 'there is a changes on tool03'  

我的输出#2的示例结果:

runA = [(u'tool01', '21'), (u'tool02', '22'), (u'tool03', '23')]

runB = [(u'tool01', '20'), (u'tool02', '21'), (u'tool03', '23')]

预期结果#2:

print 'there is a changes on tool01' 
print 'there is a changes on tool02' 

我的输出#3的示例结果:

runA = [(u'tool01', '21'), (u'tool02', '22'), (u'tool03', '23')]

runB = [(u'tool01', '21'), (u'tool02', '22'), (u'tool03', '23')]

预期成果#3:

print 'there is no change'

任何建议或基础代码,提前感谢。

注意: runA和runB输出在循环中,因此它意味着它不是硬编码的。 runA和runB可以是范围tool01到tool100或tool01 only等,具体取决于循环结果到我的查询。只是简单的工具在for循环中,因此工具no可以更多或更少。

4 个答案:

答案 0 :(得分:0)

for i in runA - 1:
  If runA[i][1] != runB[i][1]:
    print 'there is a changes in ' + runA[i][0]

这假设有两件事:

  
      
  1. 列表长度相等
  2.   
  3. 元组名称具有相同的索引
  4.   

正如您的一位评论者建议的那样,使用dict会更容易,因为您可以遍历密钥并使用d[key]访问成员

答案 1 :(得分:0)

#/bin/python
confirm_change=False

runA = [(u'tool01', '21'), (u'tool02', '22'), (u'tool03', '23')]

runB = [(u'tool01', '20'), (u'tool02', '21'), (u'tool03', '23')]

for i in runA:
    for j in runB:
        if i[0]==j[0] and not i[1]==j[1]:
            confirm_change=True
            print("there is a change in",i[0])
if confirm_change==False:
    print("There is no change")

答案 2 :(得分:0)

下一个功能应该做你需要的:

def matchTuples(runA, runB):
    equal = True
    for i in range(0, len(runA) ):
        if runA[i] != runB[i]:
            equal = False
            print 'there is a change on ' + runA[i][0]
    if equal:
        'there is no change'

迭代列表以检查它们是否相等。如果有更改,则会打印已更改的元组的名称。

最后,如果没有检测到任何变化(也就是说,如果变量“equal”仍为True),则打印出“没有变化”。

答案 3 :(得分:0)

$_POST['name'] . ' - ' . $_POST['food']