Python 严格增加列表中相邻元素之间的差异

Python 严格增加列表中相邻元素之间的差异,python,python-3.x,Python,Python 3.x,编写一个函数expandingl,该函数以整数l的列表作为输入,如果每个相邻元素对之间的绝对差严格增加,则返回True 我试图执行这段代码,但对于某些列表,这并没有返回正确的值 def扩展: 对于0范围内的i,lenl-3: 如果absl[i+2]-l[i+1]>absl[i+1]-l[i]: 答案=正确 其他: 答案=错误 回覆 展开[1,3,7,2,-3]应为False,但输出为True。使用临时变量存储差异,并在达到非递增差异后退出 def扩展: dif=absl[1]-l[0] 对于范围

编写一个函数expandingl,该函数以整数l的列表作为输入,如果每个相邻元素对之间的绝对差严格增加,则返回True

我试图执行这段代码,但对于某些列表,这并没有返回正确的值

def扩展: 对于0范围内的i,lenl-3: 如果absl[i+2]-l[i+1]>absl[i+1]-l[i]: 答案=正确 其他: 答案=错误 回覆
展开[1,3,7,2,-3]应为False,但输出为True。

使用临时变量存储差异,并在达到非递增差异后退出

def扩展: dif=absl[1]-l[0] 对于范围1中的i,lenl-1: 温度=absl[i+1]-l[i] 非递增差异、收益 如果温度使用临时变量存储差异,并在达到非递增差异后退出

def扩展: dif=absl[1]-l[0] 对于范围1中的i,lenl-1: 温度=absl[i+1]-l[i] 非递增差异、收益 如果温度 将numpy作为np导入 x=np.数组[1,3,7,2,-3] np.diffabsx[1:]-x[:-1]>0.all返回False 如果你喜欢函数,我会这样做:

def扩展: 如果传递了列表,则将列表转换为np.array 如果isinstancel,请列出: l=np.arrayl 返回np.diffabsl[1:]-l[:-1]>0.all Numpy是你的朋友:

将numpy作为np导入 x=np.数组[1,3,7,2,-3] np.diffabsx[1:]-x[:-1]>0.all返回False 如果你喜欢函数,我会这样做:

def扩展: 如果传递了列表,则将列表转换为np.array 如果isinstancel,请列出: l=np.arrayl 返回np.diffabsl[1:]-l[:-1]>0.all
另一个使用迭代器的解决方案:

来自itertools进口T恤、islice、星图 从操作员导入lt,子 def pairwisex: a、 b=teex,2 返回zipa,Islicec,1,无 a=[1,3,7,2,-3] pairs=pairwisea这将是一个[0]、一个[1]、一个[1]、一个[2]、。。。 下一步将生成结果absa[1]-a[0],absa[2]-a[1]。。。 差异=映射Abs、starmapsub、成对 这将是absa[2]-a[1]>absa[1]-a[0],absa[3]-a[2]>absa[2]-a[1]。。。 cmp=starmaplt,成对差异 如果cmp中的所有项目都评估为真,则差异将严格增加。。。 结果=allcmp 打印结果
此类输入的输出为False

这是另一个使用迭代器的解决方案:

来自itertools进口T恤、islice、星图 从操作员导入lt,子 def pairwisex: a、 b=teex,2 返回zipa,Islicec,1,无 a=[1,3,7,2,-3] pairs=pairwisea这将是一个[0]、一个[1]、一个[1]、一个[2]、。。。 下一步将生成结果absa[1]-a[0],absa[2]-a[1]。。。 差异=映射Abs、starmapsub、成对 这将是absa[2]-a[1]>absa[1]-a[0],absa[3]-a[2]>absa[2]-a[1]。。。 cmp=starmaplt,成对差异 如果cmp中的所有项目都评估为真,则差异将严格增加。。。 结果=allcmp 打印结果
此类输入的输出为假

您的逻辑有点错误。一旦你知道一个项目出了问题,你应该为整个列表回答False

def扩展: 对于0范围内的i,lenl-3:
如果absl[i+2]-l[i+1]您的逻辑有点错误。一旦你知道一个项目出了问题,你应该为整个列表回答False

def扩展: 对于0范围内的i,lenl-3: 如果absl[i+2]-l[i+1] 一旦你知道一个项目出了问题,你就应该在不等待的情况下为整个列表回答False,这样其他对就不会改变答案

还要注意从range0,lenl-3到range0,lenl-2的变化。原始实现缺少最后一对列表元素

一旦你知道一个项目出了问题,你就应该在不等待的情况下为整个列表回答False,这样其他对就不会改变答案


还要注意从range0,lenl-3到range0,lenl-2的变化。原始实现缺少最后一对列表元素。

我建议在迭代器中编写条件,然后传递给它,以确保在第一次出现非扩展差异时,迭代停止并返回False

下面是它的外观:

def扩展: 对于范围1中的i,lenl-1,不返回anyabsl[i-1]-l[i]>=absl[i]-l[i+1]
我建议在一个迭代器中编写条件,然后传递给它,以确保在第一次出现非扩展差异时,迭代停止并返回False

下面是它的外观:

def扩展: 对于范围1中的i,lenl-1,不返回anyabsl[i-1]-l[i]>=absl[i]-l[i+1] Debkanta Mondal编写的代码 蟒蛇3 PrintExpansing[1,3,7,2,-3]

由Debkanta Mondal编写的代码 蟒蛇3 printexpan
丁[1,3,7,2,-3]

我不认为这符合OP的要求。问题是找出相邻元素之间的绝对差是否严格增加,但这只是找出列表元素的绝对值是否严格增加。它在x=np.数组[1,3,7,2,-4]上失败。绝对差异为[2,4,5,6],但您的实现的计算结果为False。我不认为这符合OP的要求。问题是找出相邻元素之间的绝对差是否严格增加,但这只是找出列表元素的绝对值是否严格增加。它在x=np.数组[1,3,7,2,-4]上失败。绝对差异为[2,4,5,6],但您的实现的计算结果为False。我认为这个答案将受益于一些代码注释。读者可能不熟悉您正在使用的itertools和运算符函数。我认为这个答案将从一些代码注释中受益。读者可能不熟悉您正在使用的itertools和运算符函数。
def expanding(l):
 for i in range(0,len(l)-2):
  if (abs(l[i+2]-l[i+1])>abs(l[i+1]-l[i])):
   Answer=True
  else:
   Answer=False
   return Answer
 return Answer

expanding([1,3,7,2,-3]) 
def expanding(l):
dif=[]
for x,y in zip(l,l[1:]):
    diff=abs(y-x)
    dif.append(diff)
return all(i<j for i,j in zip(dif,dif[1:]))