Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在窗口大小6中找到4个符合条件的值,然后添加到列表中,直到3个不符合条件不包括最后3->;重复下一个窗口。python_Python_Windows_List_Function_Extend - Fatal编程技术网

在窗口大小6中找到4个符合条件的值,然后添加到列表中,直到3个不符合条件不包括最后3->;重复下一个窗口。python

在窗口大小6中找到4个符合条件的值,然后添加到列表中,直到3个不符合条件不包括最后3->;重复下一个窗口。python,python,windows,list,function,extend,Python,Windows,List,Function,Extend,如果您有一个值列表: values=['130','90','150','123','133','120','160', '45','67', '55','34','130','120','180','130','10'] 并希望以6的窗口大小进行扫描,如果6个窗口中有4个大于等于100,则继续扫描,直到一行中有3个小于100,然后不包括在列表中 例如,对于一个名为results的空列表: results=[] 我想将那些满足条件的值附加到空列表中,以获得 r

如果您有一个值列表:

values=['130','90','150','123','133','120','160',
        '45','67',
        '55','34','130','120','180','130','10']
并希望以6的窗口大小进行扫描,如果6个窗口中有4个大于等于100,则继续扫描,直到一行中有3个小于100,然后不包括在列表中

例如,对于一个名为results的空列表:

results=[]
我想将那些满足条件的值附加到空列表中,以获得

results=[('130','90','150','123','133','120','160'),
         ('55','34','120','180','130','10')]

我知道我已经用int()将所有字符串转换成整数,但这不是我遇到的问题。我很难找到大于等于100的窗口大小6中的4个,将其添加到列表中,然后从我在窗口中停止的位置开始

在Chou-Fasman算法中,每个窗口大小为6,如果4大于100,则所有6个都包括在内,并将其扩展到4个连续值(我将改为3个)小于100(不包括这4个(或3个),然后窗口从该点重新开始,生成一个新列表

因此,第一个窗口是:

['130','90','150','123','133,'120'] #and more than 4 are greater than
# 100 so that starting point is stored and the next window is checked
['90','150','123','133','120','160'] #again there are 4 greater than 
# 100 so the next window is checked
['150','123','133','120','160','45'] #again
['123','133','120','160','45','67'] #again
['133','120','160','45','67','55'] #stop and assign values '130' to '160'
# into a list and then start the new window from where it left off

Results=[('130','90','150','123','133','120','160')]

['120','160','45','67','55','34'] # skips
['160','45','67','55','34','130'] # skips
['45','67','55','34','130','120'] # skips
['67','55','34','130','120','180'] # skips
['55','34','130','120','180','130'] # new list in Results starts with '55'
['34','130','120','180','130','10'] # sequence ends and this window still 
# fits criteria so include these into the list so the results would now be

Results=[('130','90','150','123','133','120','160'),      
         ('55','34','130','120','180','130','10')]

如果可能的话,我真的很想使用循环,远离产量和发电机,但如果这是唯一的方法,那就这样吧你想试试看它是否符合你的要求吗

for i in xrange(0,len(values)):
    results[-1].append(values[i])
    if len(filter(lambda x:int(x)<100,results[-1][-3:])) == 3:
        results.append(results[-1][-2:])
        results[-2]=results[-2][:-3]
        if len(results[-2]) == 0:
            del results[-2]


>>> results
[['130', '90', '150', '123', '133', '120', '160'], ['55', '34', '130', '120', '180', '130', '10']]
>>> 
xrange(0,len(值))中的i的
:
结果[-1]。追加(值[i])
如果len(过滤器(λx:int(x)>>结果
[['130', '90', '150', '123', '133', '120', '160'], ['55', '34', '130', '120', '180', '130', '10']]
>>> 

“如果可能的话,我真的希望使用For循环并远离产量和发电机”这是一个奇怪的限制!为什么?当我在函数中使用收益率时,它们总是会发疯,不起作用。这是一个更大的函数中的一个较小的部分。我已经完成了其他部分,但这是我无法完成的主要部分。听起来你把函数做得太大了,它们几乎肯定没有遵守规则。我很抱歉不知道
yield
有任何问题会导致函数“崩溃”。另请参阅。警告:包含
yield
@draconis0ry您能解释应该发生什么,以及使用值=['130'、'190'、'150'、'1'、'133'、'120'、'160'、'45'、'67'、'258'、'589'、'78'、'55'、'34'、'130'、'120'得出什么结果吗‌​,'180’、‘130’、‘10’],也就是说有3个numbers@draconisthe0ry该代码给出了['130','190','150','1','133','120','160','45','67','258','589',['34','130','120','180','130','10']]和
值=['130','190','150','1','133','120','160','45','67','258','589','78','55','34','130','120','180','130','10']
:第一个元素中有3个数字<100。这是whished结果吗?@eyquem我以前的代码中有一个问题,给出了错误的结果。我现在已经更正了:-)。通过上述输入,结果现在显示为
[[130',190',150',1',133',120',160',45',67',258',589'],['55', '34', '130', '120', '180', '130', '10']]
@draconisth0ry Abhijit,现在结果中第一个元素有1,45,67,第二个元素有55,34,10,而draconisth0ry似乎不希望结果中有3个小于100的数字elements@eyquem根据问题陈述
,直到一行中有3个<100
@eyquem,您的问题将更容易解决求解。保持一个小于100的计数器,并在计数器为3时拆分。