英文:
Problem with iteration in a for loop that contains if statement
问题
我是编程新手,必须承认自己非常无知。
我目前正在尝试将Matlab脚本转换为Python,但我遇到了一些问题。我需要根据一个阈值选择现有数组的值,并创建一个新列表。阈值是一个固定值,应该不会越过数组的第i和i+1元素之间的减法结果。如果阈值被越过,我想保留第一个值(即i+1)。
以下是参考的Matlab代码:
old_list = [10; 32; 35; 60; 90; 100];
doube_indices = [];
for i=1:length(old_list)-1
if(old_list(i+1) - old_list(i) < threshold)
doube_indices = [doube_indices i+1];
end
end
new_list(doube_indices) = [];
threshold = 20;
我尝试以多种方式在Python中做类似的事情,但我一直失败。我认为我的最大问题在于选择列表中的第二个数字,就像在MATLAB中一样,即i+1。这可能是一些非常简单的东西,但我对这方面的了解还不够,所以我会感激一些建议!你能帮助我吗?
英文:
I am new in programming and I have to admit very ignorant.
I am currently trying to transform a Matlab script to Python but I face some issues. What I need is to select values of an existing array, based on a threshold, and create a new list. The threshold is a set value that the result of a subtraction between the i+1 and i elements of my array should not cross. If the threshold is crossed I want to keep the first value (i.e i+1).
Here is the Matlab code of reference:
old_list = [10; 32; 35; 60; 90; 100];
doube_indices = [];
for i=1:length(old_list)-1
if(old_list(i+1) - old_list(i) < threshold)
doube_indices = [doube_indices i+1];
end
end
new_list(doube_indices) = [];
threshold = 20;
I tried to make something similar in Python in several ways but I am constantly failing. I believe my biggest problem is to select the second number of the list as it is done in MATLAB i.e. i+1. It might be something very easy but I am too new on that stuff so I would appreciate some input! Could you please help me?
答案1
得分: 1
一项关键困难是Python从0开始编号其列表,而Matlab从1开始。这实现了您的基本代码:
old_list = [10, 32, 35, 60, 90, 100]
threshold = 20
double_indices = []
for i in range(len(old_list)-1):
if old_list[i+1] - old_list[i] < threshold:
double_indices.append(i+1)
print(double_indices)
输出:
[2, 5]
随着您变得更加熟练,您会想要开始使用numpy
库。numpy
实现了大部分MATLAB可以做的事情,允许您一次操作整个数组或数组切片。
后续
如果您只想要旧列表中与前一个元素不接近的值,那么这是一个不同的循环:
old_list = [10, 32, 35, 60, 90, 100]
threshold = 20
new_list = []
for val in old_list:
if not new_list or abs(val - new_list[-1]) > threshold:
new_list.append(val)
print(new_list)
输出:
[10, 32, 60, 90]
英文:
One key difficulty is that Python numbers its lists starting from 0, whereas Matlab starts at 1. This implements your basic code:
old_list = [10, 32, 35, 60, 90, 100]
threshold = 20
double_indices = []
for i in range(len(old_list)-1):
if old_list[i+1] - old_list[i] < threshold:
double_indices.append(i+1)
print(double_indices)
Output:
[2, 5]
As you get more sophisticated, you'll want to start using the numpy
library. numpy
implements most of what MATLAB can do, allowing you to operate on an entire array or array slice at a time.
Followup
If you just want the values from the old list that are not close to the previous element, that's a different loop:
old_list = [10, 32, 35, 60, 90, 100]
threshold = 20
new_list = []
for val in old_list:
if not new_list or abs(val - new_list[-1]) > threshold:
new_list.append(val)
print(new_list)
Output:
[10, 32, 60, 90]
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论