逆向对比vs正向对比

题目来自一个朋友的询问。对比a b两个列表,一次对比a b列表中的元素,(1)如a[0] b[0],若两者相同,输出O;(2)若不同,b元素查找是否在a中存在相同的元素,若有输出X,没有不输出;(3)但此时a中的那个元素,对应相同索引的b元素,不可与a相同,如果相同,将不算。

解题思路:
由于列别默认对比,是顺序对比,但会出现在之后的对比元素中出现(3)这种情况。因此采用逆向对比。


#逆向对比
'''
#a = ['g', 's', 'g', 'g']
#b = ['s', 'g', 's', 's']
'''
a = ['s', 'r', 'g', 'g']
b = ['r', 'g', 'g', 'g']

l = len(a)
lst = []
on = []

for i in range(l-1,-1,-1):
    if a[i] == b[i]:
        on.append('O')
        a.pop(i)
    elif b[i] in a:
        on.append('X')

print(on[::-1])
#正向对比(会有bug)
l = len(a)
lst = []
on = []

for i in range(l):
    if a[i] == b[i]:
        on.append('O')
        lst.append(i)

    elif b[i] in a[i:]:
        on.append('X')
        lst.append(a.index(b[i]))

    else:
        lst.append('')

    if i in lst[:i]:

        on[i] = ''
        #lst[lst.index(i)] = ''

    print(i, on, lst)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值