我已经为此寻找解决方案一段时间了,虽然我有一些理解片段,但我无法完全让它按预期工作。我希望我能得到一些见解:
所以我有一个包含数字的列表:
refl = ["100", "99", "90", "80", "60", "50", "10"]
我想找出第一项是否大于第二项,第二项是否大于第三项,第三项是否大于第四项等。
我想我正在努力解决如何捕获初始列表对象以将其与下一个进行比较......?
任何帮助将不胜感激,
编辑以添加功能*****
我有以下功能:
refl = ["100", "99", "90", "80", "60", "50", "10"]
def funcc(refl):
if (refl[0]) > (refl[1]):
print("more")
else:
print("less")
我如何让函数运行列表中的每个对象,而不隐式指定 [1] 是否> [2]、[2]> [3] 等
非常感谢,
这是您现有的代码:
def funcc(refl):
if (refl[0]) > (refl[1]):
print("more")
else:
print("less")
你的问题是,你只比较第一个(refl[0]
(和第二个(refl[1]
(元素。一个微不足道的修复是:
def funcc(refl):
for i in range(len(refl)) - 1:
if (refl[i + 1]) >= (refl[i]):
return False
return True
然后按如下方式使用它:
refl = ["100", "99", "90", "80", "60", "50", "10"]
if funcc(refl):
print("Monotone decreasing")
else:
print("Not monotone decreasing")
您可以将列表zip()
成对,然后检查每对中的第一个项目是否大于第二个项目。我假设你想要这里的整数比较。如果没有,您可以删除int()
强制转换,这将使用字符串各自的 ASCII 值按字典顺序比较字符串。
然后,您可以使用all()
来检查每对是否都满足此条件。
>>> refl = ["100", "99", "90", "80", "60", "50", "10"]
>>> all(int(fst) > int(snd) for fst, snd in zip(refl, refl[1:]))
True
如果您只想从每次比较中捕获布尔结果,则可以使用列表推导:
>>> [int(fst) > int(snd) for fst, snd in zip(refl, refl[1:])]
[True, True, True, True, True, True]
变量refl
是一个列表,您可以使用整数索引引用列表中的每个项目。您可以使用这些索引来比较值,并使用 while 循环来自动比较每对项目。为此,您首先需要将循环配置为访问列表中的每个项目,停止最后一个项目,因为您将在前面比较一个项目。
refl = ["100", "99", "90", "80", "60", "50", "10"]
counter = 0
while counter < len(refl)-1: #remember, the length of the list is 7, the last index is 6
if refl[counter] < refl[counter+1]: #if the item smaller than the next item
print("The previous item is not larger")
else:
print("the previous item is larger")
counter += 1 #add one to counter and re-assign
如果比较是整数,则首先需要将所有项目转换为整数。
refl = list(map(int, refl))
然后,逻辑AND
全部用于将前 n-1 项与后 n-1 项greater
进行比较。
result = all(map(int.__gt__, refl[:-1], refl[1:]))
refl = ["100", "99", "90", "80", "60", "50", "10"]
def procedure(refl):
for count in range(len(ref1)):
if (refl[count]) > (refl[count+1]):
print("more")
else:
print("less")
procedure(ref1)