需要帮助Bettter逻辑来搜索python中列表中的字符串序列

时间:2016-02-02 05:07:50

标签: python-2.7

我有一个包含整数的列表,我需要检查列表中的字符串序列。

我的清单= [1,8,9,2,7,8,6,3,4]这里我需要检查1,2,3,4是否在列表中,在1,2之后应该在那里列表然后列表中有3个,3之后应该有3个。

1,2,3,4可能不是按顺序排列,但是列表中是否有1,2,3,4需要检查并报告是否缺少任何一个。

    import os
    import re
    res=[1,8,9,2,7,8,6,3]
    cnt=0
    def check():
        global cnt
        for i in range(len(res)):
            if res[i]==1:
                cnt=1
                print "1"
            if cnt==1 and res[i]==2:
                 cnt=2
                 print "2"
            if cnt==2 and res[i]==3:
                  cnt=3
                  print "3"

             if cnt==3 and res[i]==4:
                  cnt=4
                  print "sequence correct"

        if cnt==0:
           print "1 not found"
           return                
        if cnt==1:
           print "not found"
           return
        if cnt==2:
           print "3 not found"
           return
        if cnt==3:
           print "4 not found"
           return


    c=check()
    print c

任何人都可以建议我以更简单的方式做更多的逻辑。

3 个答案:

答案 0 :(得分:1)

我知道你有一个数字列表,一个代表一系列数字的字符串,你的任务是找出数字序列是否出现在列表中。

尝试使用此方法,通过切片进行一些智能检查:

>>> def find_seq(nums, seq, sep=','):
...     seq = map(int, seq.split(sep))
...     if seq[0] in nums:
...         return nums[nums.index(seq[0]):len(seq)+1] == seq
...     return False
...
>>> find_seq([1,2,3,4,5], '2,3')
True
>>> find_seq([1,2,3,4,5], '9')
False

这是它的作用:

  1. 它会转换您的"搜索字符串"到一个数字列表(因为你的干草堆也是一个数字列表)

  2. 然后它尝试从haystack中提取相同大小的列表,并将其与搜索字符串进行比较。

  3. 这种方法存在一些问题,即如果nums列表有重复,那么索引检查将无法准确匹配 - 但我会由您决定如何进行优化。

      

    我需要检查列表中是否存在2,3,4以及是否存在   2,3,4号码' 2'应该先来,然后是3,然后是' 4'并在   在这三个值之间可能没有任何整数。

    好的,这是一个不同的问题 - 如何:

    >>> def find_seq(nums, seq, sep=','):
    ...     seq = map(int, seq.split(sep))
    ...     results = [(nums.index(i), i) for i in seq if i in nums]
    ...     return len(results) == len(seq) and results == sorted(results, key=lambda x: x[0])
    ...
    >>> find_seq([1,2,3,4,5], '2,3,4')
    True
    >>> find_seq([1,2,3,5,4], '2,3,4')
    True
    >>> find_seq([1,4,3,5,2], '2,3,4')
    False
    

    首先,我们搜索序列中的数字,并在nums列表中找到它们的位置。

    然后,我们检查两件事:

    1. 如果找到所有数字(结果的长度应与我们搜索的序列的长度相同)

    2. 然后,为了检查数字是否按顺序出现,我们检查过滤的结果是否按位置按升序(递增)顺序排列。由于列表是0索引的,因此项目的顺序应该从最低到最高。如果它不按此顺序,则表示数字存在,但不是我们想要的顺序。

答案 1 :(得分:0)

我不完全确定我理解你在寻找什么,但是这样的工作会有所作为:

def check(number, lst):
 #checks if a specified number ('number') is in a list ('lst')
 if number in lst:
  return number
 else:
  return "Unable to find " + str(number)

def runChecks(numbers, lst):
 #runs multiple checks of a list based on a list of numbers ('numbers')
 for i in numbers:
  print check(i, lst)
aList = [1,8,9,2,7,8,6,3,4]
runChecks([1, 2, 3, 4], aList)

答案 2 :(得分:0)

您可以尝试这样:

>>> my_list = [1, 8, 9, 2, 7, 8, 6, 3, 4]
>>> list_to_check = max(my_list)
>>> for i in range(1 , list_to_check+1):
...     if i not in my_list:
...        print str(i)+" not in list"
...        break
...
5 not in list