我有一个嵌套的数字列表。像这样:
[[1,2,3],[3,2,1],[3,1,2],[2,3,1]]
现在,我想计算比它的前一个元素及其前面的元素更大的数字,它还必须在它的两个元素上都有一个元素。两侧。输出应该是这样的(在列表中):
[0,0,0,1]
输出列表的第一个元素是零,因为在第一个嵌套列表中,它的第一个元素没有其他前一个元素,但在它的前面只有2个元素。对于第二个元素(仍在第一个嵌套列表中),它的前一个元素为1,而前一个元素为3,但输出为零,因为它需要大于两个元素它前面的元素和它的前一个元素。第三个元素也是无效的,因为它没有前面的元素,只有它的前一个元素。除了最后一个之外,其他嵌套列表也是如此。在最后一个嵌套列表中,2和1已经无效,但是3是,所以现在我们需要检查它是否高于它的两个元素。由于三个较高,我们将最后一个嵌套列表计为+1。
另一个例子:
[[1,2,1,3,1],[2,2,2],[2,3,4,3,4,2,3,1]]
输出应为:
[2,0,3]
输出列表的第一个元素是2,因为在第一个嵌套列表中(第一个和最后一个元素已经无效),2具有两个元素,并且它也高于两者。然后,我们继续到1,它也有两个元素,但它比两者都小,所以它无效。 3是有效的,因为它有两个元素,而且它也更高。所以我们计算+2,因为有2个数字有效。第二个嵌套列表无效,因为包含两个元素的数字不能等于它们中的任何一个,它需要更高,并且第一个和最后一个元素已经无效。在最后一个嵌套列表中,它的第一个和最后一个元素已经无效了,所以我们从它的第二个开始,3,3有两个元素,但它只比它的前一个元素高,但比它的前一个要小。接下来,4有两个元素,它也更高,所以它被计算。接下来,3有两个元素,但它比它们都小,所以不计算。接下来,4具有两个元素,并且它也高于它的元素。接下来,2有两个元素,但它比它的元素小,所以它不计算。接下来,3有两个元素,它也高于两者,所以它也算数。这使得输出列表中的最后一个元素计数为+3。
如果解释太长/太长,我很抱歉,但有没有办法在Python 3中这样做?
编辑:
到目前为止,我已经尝试过这个:
listy = [[1,2,3],[3,2,1],[3,1,2],[2,3,1]]
list_hold = []
for x in listy:
for y in x:
if y>y+1 and y>y-1:
list_hold.append(x)
print(list_hold)
但它只返回一个空列表。
答案 0 :(得分:1)
你需要一个滑动窗口迭代器;从输入序列连续产生3个元素的东西;所有你需要做的就是计算中间元素大于其他两个元素的窗口数。
滑动窗口问题已经解决:Rolling or sliding window iterator?,使用window()
function from the top answer there会给你:
>>> outerlist = [[1,2,3],[3,2,1],[3,1,2],[2,3,1]]
>>> [count_maxima(sublist) for sublist in outerlist]
[0, 0, 0, 1]
>>> outerlist = [[1,2,1,3,1],[2,2,2],[2,3,4,3,4,2,3,1]]
>>> [count_maxima(sublist) for sublist in outerlist]
[2, 0, 3]
演示:
@app.route('/inner', methods=['GET', 'POST'])
def inner():
name = request.form['name']
password = request.form['password']
if name == "" or password == "":
return render_template('index.html');
else:
df = pd.read_csv("login.csv", sep=',', encoding="utf-8")
for row in df:
if row[0][0] == name and row[0][1] == password:
print('sucess')
return render_template('inner.html');
else:
return render_template('index.html');
答案 1 :(得分:0)
我的第一个想法是使用np.diff。如果你有一个给定的值列表,你可以使用np.diff(vals)来获得一个数组,如果下一个数字较小则为负数,如果下一个数字较大则为正数
def count_local_maxima(vals):
if len(vals) < 3:
return 0
diffs = np.diff(vals)
return np.sum((diffs[:-1]>0) & (diffs[1:]<0))
result = [count_local_maxima(sublist) for sublist in mainlist]