Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.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
在for循环python中迭代两个对象_Python_For Loop - Fatal编程技术网

在for循环python中迭代两个对象

在for循环python中迭代两个对象,python,for-loop,Python,For Loop,我试图在for循环中迭代两个范围相同的对象,但是,它显示了一个错误 for (s,s1) in range (5000,10000): TypeError: cannot unpack non-iterable int object 我的代码是: (fs, data)=wav.read('13.wav') frq, X = frequency_sepectrum(data, fs) y=butter_highpass_filter(data,3000, fs, order=5)

我试图在for循环中迭代两个范围相同的对象,但是,它显示了一个错误

for (s,s1) in range (5000,10000):
TypeError: cannot unpack non-iterable int object
我的代码是:

(fs, data)=wav.read('13.wav')
frq, X = frequency_sepectrum(data, fs)

y=butter_highpass_filter(data,3000, fs, order=5)        
frqs, Y = frequency_sepectrum(y, fs)

s = set (frq)
s1 = set (frqs)
for (s,s1) in range (5000,10000):
    if (X[s]> 10 and Y[s1]>100):
        print ('yes')
        break

我刚刚尝试了我的解决方案:

s = set (frq)
s1 = set (frqs)
for s in range(5000,10000):
    for s1 in range (5000,10000):
        if (X[s]> 10 and Y[s1]>100):
            print ('yes')
            break

运行时间有点长,所以我想知道有什么方法可以节省执行时间吗?

让我们在iterable:

Python期望iterable在某种意义上是“类似列表的”:列表、字典或类似的东西。在每次循环迭代中,
obj
获取
iterable
中“下一个”的值。这里,您的
iterable
范围(500010000)
,它指的是序列500050015002,…,9999。您的代码出错,因为没有合理的方法将2元组
(s,s1)
设置为数字,例如5000

我不是100%确定您想要实现什么,但是假设您只想检查5000到10000之间的频率,即只有那些
frq[I]>5000和&frq[I]<10000
的条目,您需要做一些其他的事情

将numpy导入为np
(fs,data)=wav.read('13.wav')
frq,X=频率(数据,fs)
y=高通滤波器(数据,3000,fs,顺序=5)
frqs,Y=频率(Y,fs)
#可选检查frq、frq是否相同(我假设它们相同)
对于拉链中的f1、f2(frq、frq):
如果f1!=f2:
打印(“频率网格不一致”)
#找到边界频率的指数,
#假设FRQ为升序
min_idx=np.searchsorted(frqs,5000)
最大idx=np.搜索排序(frqs,10000)
#切掉无关的价值观
frqs=frqs[min\u idx:max\u idx]
X=X[最小值:最大值]
Y=Y[min\u idx:max\u idx]
#O(n)循环检查X>10、Y>100的首次(最低频率)出现
对于拉链中的f、x、y(frq、x、y):
如果(x>10,y>100):
打印('是,在频率f='处找到,f)
打破
说明:

zip(frq,frqs)
将两个向量粘在一起,形成一个元组向量,想象一下这样的
[(,),(,),(,),(,),…]

对于f1,zip中的f2(frq,frqs)
将f1设置为
frq
具有的值,并将f2设置为
frqs
在每次循环迭代中具有的值

下面的循环做同样的事情,但是有三个向量粘在一起


请注意,如果
X,Y,frq,frq中的任何一个长度与其他长度不同,则此操作将意外失败/行为。

您只需要在zip(X,Y)中为X,Y添加
注意,对于您的情况,您可以重复使用
s
@juanpa.arrivillaga谢谢您的回复。我认为问题出现在范围(500010000)内的(s,s1)的
行中:
您的意思是将其更改为zip(s,s1)中的
s,s1:
?您希望
s
s1
在第一次迭代中应该具有哪些值?如果相同,则不需要两个变量。如果两个值不同,则可能会误解
range()
的工作原理。是哪一个?@yedpodtrzitko Hi,s和s1是两个非常大的阵列。我想确保s和s1的值在5k到10k之间。然后,我需要找出s和s1对应的X和Y值,
frequency\u spectrum
来自哪个模块?