python3 比较两个list的结构

题目:

比较两个list的结构,如:
a = [1,2,3]
b = [4,5,6]
则两个list的结构相同
如:
a = [1,2,3,[4,5,6,[7]]]
b = [1,[2],[3]]
则两个list的结构不同

思路:

print list的时候会将list的括号、逗号都打印出来。获取打印结果中的括号、逗号作为list的结构。比较即可得知两个list结构是否相同

代码:

import sys
from io import StringIO

a = [1,2,3]
b = [1,2]
c = [1,2,3,[4,5,6,[7]]]
d = [2,3,4,[5,6,7,[8]]]

def compare(a,b):
    #get print out
    #how to use StringIO()
    stdout = sys.stdout 
    stream = StringIO()
    sys.stdout = stream
    print(a)
    print(b)
    sys.stdout = stdout

    variable = str(stream.getvalue())
    res = variable.split('\n')
    # print(variable.split('\n'))

    str_a = res[0]
    str_b = res[1]

    struct_a = ''.join([x for x in res[0] if x in [',','[',']']])
    struct_b = ''.join([x for x in res[1] if x in [',','[',']']])


    # print(str_a)
    # print(str_b)
    # print(type(str_a))
    # print(struct_a)
    # print(struct_b)

    if struct_a == struct_b: return 'True'
    else: return 'False'

print(compare(a,b))

运行结果:

>>>print(compare(a,b))
False
>>>print(compare(c,d))
True

参考:
http://stackoverflow.com/questions/14197009/how-can-i-redirect-print-output-of-a-function-in-python

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值