循环列表中的数学运算

3

假设我有一个列表,例如:

my_list=['0','2','3','5','1']

我希望通过每个数字按照一个序列相互减去来创建一个新的列表,以如下方式呈现(每个数字向左减去):
0-nothing=0
2-0=2
3-2=1
5-3=2
1-5=-4
new_list=['0','2','1','2','-4']

我觉得这个问题可以在一个for循环中解决。以下是我的可怕的for循环代码,以及手动完成的过程:
new_list = []
for item in my_list:
    new_list.append(float(item)) #Converting strings into floats

print(new_list)

#for number in my_list:
  #print(list(str((number-[0:])))) #completely wrong

new_list[0]=new_list[0]
new_list[1]=new_list[1]-new_list[0]
new_list[2]=new_list[2]-new_list[1] #Won't work past this point as the numbers in the list are now new.
new_list[3]=new_list[3]-new_list[2]
new_list[4]=new_list[4]-new_list[3]

print(new_list)

我尝试的每件事都是灾难。我的低劣逻辑是否导致了我走错了路?

5个回答

2

虽然这种方法不够优雅,但是由于其有趣性,我们仍然选择使用它:

#my_list=[0,2,3,5,1]
my_list=['0','2','3','5','1']
my_list= [int(x) for x in my_list] 

new_list=[]
for i in my_list:
    for j in my_list:
        for k in range(len(my_list)):
            if i == my_list[k] and j == my_list[k-1]:
                if i == my_list[0]:
                    new_list.append(i)
                else:
                    new_list.append(i-j)

new_list= [str(x) for x in new_list] # only necessary if output should be str not int

print(new_list)

1
为了使用for循环实现此操作,您可以使用range遍历索引,然后根据indexindex-1计算元素,如下所示:
my_list=['0','2','3','5','1']

new_list = [my_list[0]]
for index in range(1, len(my_list)):
  new_list.append(str(int(my_list[index]) - int(my_list[index-1])))

print(new_list)

你也可以使用 zip 来遍历相邻的元素,而不需要处理索引,就像这样:

my_list=['0','2','3','5','1']

new_list = [my_list[0]]
for first,second in zip(my_list, my_list[1:]):
  new_list.append(str(int(second) - int(first)))

print(new_list)

注意:如果您的列表是int类型,您可以省略str/int转换。

这与问题本身存在相同的问题,对吧? - OneCricketeer

1
为了修复数值随着操作变化的问题,您可以在更新数值的方向上循环进行相反的操作。
new_list = list(map(float, my_list))
for i in range(len(new_list), 0, -1):
     if my_list[i] != 0:
        my_list[i] -= my_list[i-1]
print(my_list) 

1
你可以使用列表推导式来完成,检查索引是否为0,如果是,则保留该数字。
否则,使用enumerate获取当前数字及其索引idx和最后一个数字,并将两个数字相减:
my_list=['0','2','3','5','1']
new_list = [ num if idx == 0 else str(int(num) - int(my_list[idx - 1])) 
             for idx, num in enumerate(my_list)]
print(new_list)

输出:

>> ['0', '2', '1', '2', '-4']


1
my_list=['0','2','3','5','1']

l = [int(my_list[x+1]) - int(my_list[x]) for x in range(len(my_list)-1)]
l.insert(0,int(my_list[0]))

print(l)

4
仅提供代码片段而不提供上下文信息是不建议的。如果您能够通过提供更多与问题相关的背景信息来改善您的回答,那将非常好。 - colidyre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接