Python 查找列表中每个元素之间的变化
我有以下数组:Python 查找列表中每个元素之间的变化,python,python-3.x,Python,Python 3.x,我有以下数组: list1 = [2.11e-06, 2.03e-06, 2.24e-06, 2.04e-06, 3.01e-06, 1.62e-06, 1.82e-06, 1.67e-06, 1.75e-06, 1.67e-06, 1.71e-06, 1.69e-06, 1.87e-06, 1.75e-06, 1.75e-06, 1.75e-06, 1.85e-06, 1.75e-06, 2.03e-06, 1.78e-06, 1.93e-06, 1.75e-06, 1.75e-06, 1.7
list1 = [2.11e-06, 2.03e-06, 2.24e-06, 2.04e-06, 3.01e-06, 1.62e-06, 1.82e-06, 1.67e-06, 1.75e-06, 1.67e-06, 1.71e-06, 1.69e-06, 1.87e-06, 1.75e-06, 1.75e-06, 1.75e-06, 1.85e-06, 1.75e-06, 2.03e-06, 1.78e-06, 1.93e-06, 1.75e-06, 1.75e-06, 1.75e-06, 2.19e-06, 2.28e-06, 2.13e-06, 2.92e-06, 2.14e-06, 2.24e-06, 2.06e-06, 2.21e-06, 2.17e-06, 2.17e-06, 2.41e-06, 2.41e-06, 2.03e-06, 2.42e-06]
我试图得到一个新的数组,其中每个元素都是一个元素和下一个元素之间的变量。例如,如果我有[1,2,1],我需要得到[100,-50]
以下是我尝试过的:
for x in list1[1:]:
PreviousIndex = list1.index(x)-1
Variation = ((x - list1[PreviousIndex])/list1[PreviousIndex])*100
NewArr.append(Variation)
这将提供以下输出:
[-12.8099173553719, -3.7914691943128, 10.344827586206902, -8.928571428571438, 47.54901960784314, -46.179401993355484, 12.345679012345679, -8.241758241758234, 4.790419161676638, -8.241758241758234, 2.395209580838313, -1.1695906432748548, 10.650887573964509, 4.790419161676638, 4.790419161676638, 4.790419161676638, 5.714285714285721, 4.790419161676638, -3.7914691943128, -12.315270935960598, 8.426966292134846, 4.790419161676638, 4.790419161676638, 4.790419161676638, 25.142857142857157, 4.109589041095889, -6.578947368421064, 37.08920187793427, -26.712328767123296, 10.344827586206902, -8.035714285714283, 7.281553398058244, -1.8099547511312237, -1.8099547511312237, 11.059907834101375, 11.059907834101375, -3.7914691943128, 19.211822660098527]
这个实现的问题是,在列表1的某一点上,我有两个连续的相同元素1.75e-06,1.75e-06,所以我应该得到一个0.0的变量,但我没有得到它。
有人知道这个简单问题的更平滑的实现吗?我们可以使用zip遍历列表,并使用列表理解创建结果,如下所示:
list1 = [2.11e-06, 2.03e-06, 2.24e-06, 2.04e-06, 3.01e-06, 1.62e-06, 1.82e-06, 1.67e-06, 1.75e-06, 1.67e-06, 1.71e-06, 1.69e-06, 1.87e-06, 1.75e-06, 1.75e-06, 1.75e-06, 1.85e-06, 1.75e-06, 2.03e-06, 1.78e-06, 1.93e-06, 1.75e-06, 1.75e-06, 1.75e-06, 2.19e-06, 2.28e-06, 2.13e-06, 2.92e-06, 2.14e-06, 2.24e-06, 2.06e-06, 2.21e-06, 2.17e-06, 2.17e-06, 2.41e-06, 2.41e-06, 2.03e-06, 2.42e-06]
result = [(b - a)/a*100 for a, b in zip(list1[::], list1[1::])]
print(result)
结果将是:
[-3.7914691943128, 10.344827586206902, -8.928571428571438, 47.54901960784314, -46.179401993355484, 12.345679012345679, -8.241758241758234, 4.790419161676638, -4.571428571428564, 2.395209580838313, -1.1695906432748548, 10.650887573964509, -6.417112299465247, 0.0, 0.0, 5.714285714285721, -5.405405405405411, 16.000000000000004, -12.315270935960598, 8.426966292134846, -9.32642487046633, 0.0, 0.0, 25.142857142857157, 4.109589041095889, -6.578947368421064, 37.08920187793427, -26.712328767123296, 4.672897196261697, -8.035714285714283, 7.281553398058244, -1.8099547511312237, 0.0, 11.059907834101375, 0.0, -15.767634854771776, 19.211822660098527]
我认为在[1,2,1]中,结果应该是[100.0,-50.0],而不是[100.0,-100.0],如果我错了,请给出反馈以进行更正我们可以使用zip遍历列表,并使用列表理解创建结果,如下所示:
list1 = [2.11e-06, 2.03e-06, 2.24e-06, 2.04e-06, 3.01e-06, 1.62e-06, 1.82e-06, 1.67e-06, 1.75e-06, 1.67e-06, 1.71e-06, 1.69e-06, 1.87e-06, 1.75e-06, 1.75e-06, 1.75e-06, 1.85e-06, 1.75e-06, 2.03e-06, 1.78e-06, 1.93e-06, 1.75e-06, 1.75e-06, 1.75e-06, 2.19e-06, 2.28e-06, 2.13e-06, 2.92e-06, 2.14e-06, 2.24e-06, 2.06e-06, 2.21e-06, 2.17e-06, 2.17e-06, 2.41e-06, 2.41e-06, 2.03e-06, 2.42e-06]
result = [(b - a)/a*100 for a, b in zip(list1[::], list1[1::])]
print(result)
结果将是:
[-3.7914691943128, 10.344827586206902, -8.928571428571438, 47.54901960784314, -46.179401993355484, 12.345679012345679, -8.241758241758234, 4.790419161676638, -4.571428571428564, 2.395209580838313, -1.1695906432748548, 10.650887573964509, -6.417112299465247, 0.0, 0.0, 5.714285714285721, -5.405405405405411, 16.000000000000004, -12.315270935960598, 8.426966292134846, -9.32642487046633, 0.0, 0.0, 25.142857142857157, 4.109589041095889, -6.578947368421064, 37.08920187793427, -26.712328767123296, 4.672897196261697, -8.035714285714283, 7.281553398058244, -1.8099547511312237, 0.0, 11.059907834101375, 0.0, -15.767634854771776, 19.211822660098527]
我认为在[1,2,1]中,结果应该是[100.0,-50.0],而不是[100.0,-100.0],如果我错了,请给出反馈以进行更正。问题是list1.indexx是列表中第一个出现的x的索引。如果有重复,以下值将获得第一个值的索引,并且您将多次使用该第一个值的前置值
您可以只按索引枚举数组
list1 = [2.11e-06, 2.03e-06, 2.24e-06, 2.04e-06, 3.01e-06, 1.62e-06, 1.82e-06,
1.67e-06, 1.75e-06, 1.67e-06, 1.71e-06, 1.69e-06, 1.87e-06, 1.75e-06,
1.75e-06, 1.75e-06, 1.85e-06, 1.75e-06, 2.03e-06, 1.78e-06, 1.93e-06,
1.75e-06, 1.75e-06, 1.75e-06, 2.19e-06, 2.28e-06, 2.13e-06, 2.92e-06,
2.14e-06, 2.24e-06, 2.06e-06, 2.21e-06, 2.17e-06, 2.17e-06, 2.41e-06,
2.41e-06, 2.03e-06, 2.42e-06]
NewArr = []
for i in range(len(list1) -1 ):
prev = list1[i]
cur = list1[i+1]
Variation = ((cur-prev)/prev)*100
NewArr.append(Variation)
for i, item in enumerate(NewArr):
print(i, item)
您也可以使用numpy执行此操作,它将在一个步骤中将操作应用于整个阵列:
arr = np.array(list1)
cur = arr[1:]
prev = arr[:-1]
new_arr = ((cur-prev)/prev) * 100
问题在于list1.indexx是列表中第一个出现的x的索引。如果有重复,以下值将获得第一个值的索引,并且您将多次使用该第一个值的前置值
您可以只按索引枚举数组
list1 = [2.11e-06, 2.03e-06, 2.24e-06, 2.04e-06, 3.01e-06, 1.62e-06, 1.82e-06,
1.67e-06, 1.75e-06, 1.67e-06, 1.71e-06, 1.69e-06, 1.87e-06, 1.75e-06,
1.75e-06, 1.75e-06, 1.85e-06, 1.75e-06, 2.03e-06, 1.78e-06, 1.93e-06,
1.75e-06, 1.75e-06, 1.75e-06, 2.19e-06, 2.28e-06, 2.13e-06, 2.92e-06,
2.14e-06, 2.24e-06, 2.06e-06, 2.21e-06, 2.17e-06, 2.17e-06, 2.41e-06,
2.41e-06, 2.03e-06, 2.42e-06]
NewArr = []
for i in range(len(list1) -1 ):
prev = list1[i]
cur = list1[i+1]
Variation = ((cur-prev)/prev)*100
NewArr.append(Variation)
for i, item in enumerate(NewArr):
print(i, item)
您也可以使用numpy执行此操作,它将在一个步骤中将操作应用于整个阵列:
arr = np.array(list1)
cur = arr[1:]
prev = arr[:-1]
new_arr = ((cur-prev)/prev) * 100
你能为你的尝试发布一些相关代码吗?你是什么意思?这是该代码的完整输出抱歉,错过了。没问题!现在问题应该没问题了。你能为你尝试的东西发布一些相关的代码吗?你是什么意思?这是该代码的完整输出抱歉,错过了。没问题!这个问题现在应该可以了