【问题标题】:Digit Pattern matching数字模式匹配
【发布时间】:2016-09-16 02:27:43
【问题描述】:

我有一个清单:

a = [1, 2, 4, 5, 8, 2, 4, 2, 4, 6, 7]

我想数一下2, 4一起出现的次数

( 2 at index i and 4 at index i+1). 

我该怎么做?

【问题讨论】:

    标签: python python-3.x indexing


    【解决方案1】:

    为此,您需要检查给定列表中的每一对,以查看该对是否包含24。在 Python 中,您可以使用 zip 内置函数创建对。

    为了创建相邻对,我们提供列表a 作为zip 的第一个参数,并且相同的列表向前一个位置:

    list(zip(a, a[1:]))  # a[1:] is [2, 4, 5, 8, 2, 4, 2, 4, 6, 7]
    

    这会产生以下形式的对:

    [(1, 2), (2, 4), (4, 5), (5, 8), (8, 2), (2, 4), ...]
    

    现在,我们可以做的是迭代这些对(使用for),将它们解包到变量(ij)并测试我们的条件(一个等于2 和另一个 4)。这看起来像这样:

    [i == 2 and j == 4 for i, j in zip(a, a[1:])]
    

    这将创建一个列表,其中包含 True/False 条目,用于表示成功和失败我们设置的条件的对:

    [False, True, False, False, False, True, False, True, False, False]
    

    这里是另一个内置函数派上用场的地方,sum()。您可以为sum 提供一个值列表,它会将这些值汇总为一个值;幸运的是,在Python 中,True 被视为1,所以sum 可以很容易地总结并找到结果,如果我们提供我们之前创建的列表:

    sum(i == 2 and j == 4 for i,j in zip(a, a[1:]))
    

    这样做有助于我们达到3 的最终结果。

    在程序上,这可以翻译为:

    count = 0
    for i,j in zip(a, a[1:]):
        if i == 2 and j == 4:
            count += 1
    print(count)
    

    这再次产生 3sum 解决方案。

    【讨论】:

      【解决方案2】:

      将列表加入字符串并搜索'24'

      >>> a = [1, 2, 4, 5, 8, 2, 4, 2, 4, 6, 7]
      >>> ''.join(map(str, a)).count('24')
      3
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-26
        • 1970-01-01
        • 2013-01-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多