【问题标题】:How to determine if sequence is within the list of ints?如何确定序列是否在整数列表中?
【发布时间】:2022-01-19 07:22:34
【问题描述】:

我在运行 python 程序时遇到问题。目的是确定序列1, 2, 3 是否在ints 的给定列表内。当它运行两个测试时,代码可以工作。但是,第三次测试失败了,我不知道为什么。

我的代码是:

def has123(nums):
    s = ''.join(str(i) for i in sorted(nums))
    if '123' in s:
        return True
    else:
        return False

当通过参数[1, 1, 2, 3, 1][1, 1, 2, 4, 1] 传递时,它返回正确的输出,但不是[1, 1, 2, 1, 2, 3]

【问题讨论】:

  • 是的,因为当您对列表进行排序时,您的 [1, 1, 2, 1, 2, 3] 变为 [1,1,1,2,2,3]。所以没有123
  • for i in sorted(list(set(nums)))
  • return '1,2,3' in ','.join((str(n) for n in nums))
  • @Adam 看起来你可以自己找到一个反例。
  • 定义“在范围内”。

标签: python list sequence traversal


【解决方案1】:

s = ''.join(str(i) for i in sorted(nums)) 中删除sorted()

sorted() 对列表进行排序并按升序排列

因此,在您的情况下,[1, 1, 2, 1, 2, 3] 在使用 sorted() 时会转换为 '111223',因此无法找到模式

【讨论】:

  • join中的','很重要,1,2,312,3有区别
【解决方案2】:

如果您确实需要序列连续且有序(这是我理解的措辞),您可以:

  • 迭代列表中的所有1
  • 对于每个1,检查它是否是1,2,3的开头
def has123(nums):
    all_1_idx = (i for i,n in enumerate(nums) if n==1)
    for i in all_1_idx:
        if nums[i:i+3] == [1,2,3]:
            return True
    return False

【讨论】:

    【解决方案3】:

    如果数字的顺序很重要,在这种情况下很重要,所以不要对数组进行排序。 你在做什么,你正在对数组进行排序,然后制作排序数组的字符串。因此,数组元素的位置发生了变化,在这种情况下您的模式不匹配。

    def has123(nums):
       s = ''.join(str(i) for i in nums)
       if '123' in s:
          return True
       else:
          return False
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-04
      • 2013-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-14
      • 1970-01-01
      相关资源
      最近更新 更多