我有一个包含整数的列表,我需要检查列表中的字符串序列。
我的清单= [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
任何人都可以建议我以更简单的方式做更多的逻辑。
答案 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
这是它的作用:
它会转换您的"搜索字符串"到一个数字列表(因为你的干草堆也是一个数字列表)
然后它尝试从haystack中提取相同大小的列表,并将其与搜索字符串进行比较。
这种方法存在一些问题,即如果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
列表中找到它们的位置。
然后,我们检查两件事:
如果找到所有数字(结果的长度应与我们搜索的序列的长度相同)
然后,为了检查数字是否按顺序出现,我们检查过滤的结果是否按位置按升序(递增)顺序排列。由于列表是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