python:下面这个语句返回值为啥是False:
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python:下面这个语句返回值为啥是False:相关的知识,希望对你有一定的参考价值。
sorted([1, 2, 3], reverse=True) == reversed([1, 2, 3])执行结果为Flase,前面打错了,不是返回值是执行结果
sorted返回的是一个列表,而reversed返回的是一个迭代器,列表和迭代器当然不相等。
sorted([1, 2, 3], reverse=True) == list(reversed([1, 2, 3]))这样写的结果才是True
print([1, 2, 3].reverse())#None,不能这样用
print(reversed([1, 2, 3]))#<list_reverseiterator object at 0x0000000001E872E8>
aList = [1, 2, 3]
aList.reverse() #List : [3, 2, 1]
print ("List : ", aList)
#sorted返回的是一个列表,而reversed返回的是一个迭代抄器,列表和迭代器当然不相等。
print(sorted([1, 2, 3], reverse=True) == list(reversed([1, 2, 3]))) #True
# reverse()方法语法:
# list.reverse()
# reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)。
# sort()方法语法:
# list.sort( key=None, reverse=False)(reverse相反,降序,不升反降)
# reverse 英[rɪˈvɜːs] 美[rɪˈvɜːrs]
# v. 颠倒; 彻底转变; 使完全相反; 撤销,废除(决定、法律等); 使反转; 使次序颠倒;
# n. 相反的情况(或事物); 后面; 背面; 反面; 倒挡;
# adj. 相反的; 反面的; 反向的; 背面的; 后面的; 参考技术B 没给返回值,函数总是返回None 如果使用return 语句返回了值,就返回return 语句中的值 参考技术C sorted是一个函数,reverse是一个方法,调用不一样。
sorted(list,reverse=True),
list.reverse() 参考技术D Python中的sort()函数是序列的内部函数,函数原型:
L.sort(cmp=None, key=None, reverse=False)
函数作用:它是把L原地排序,也就是使用后并不是返回一个有序的序列副本,而是把当前序列变得有序。
Python中sort()参数说明:
(1) cmp参数
cmp接受一个函数,拿整形举例,形式为:
def f(a,b):
return a-b
如果排序的元素是其他类型的,如果a逻辑小于b,函数返回负数;a逻辑等于b,函数返回0;a逻辑大于b,函数返回正数就行了。
(2) key参数
key也是接受一个函数,不同的是,这个函数只接受一个元素,形式如下:
def f(a):
return len(a)
key接受的函数返回值,表示此元素的权值,sort将按照权值大小进行排序
(3) reverse参数
接受False 或者True 表示是否逆序
Python中sort()函数举例:
(1)按照元素长度排序
L = [1:5,3:4,1:3,6:3,1:1,2:4,5:6,1:9]
def f(x):
return len(x)
sort(key=f)
print L
//输出:
//[1: 9, 1: 5, 3: 4, 1: 3, 6: 3, 1: 1, 2: 4, 5: 6]
(2)按照每个字典元素里面key为1的元素的值排序
L = [1:5,3:4,1:3,6:3,1:1,2:4,5:6,1:9]
def f2(a,b):
return a[1]-b[1]
L.sort(cmp=f2)
print L
//输出:
//[1: 1, 2: 4, 5: 6, 1: 3, 6: 3, 1: 5, 3: 4, 1: 9]
为啥这个 if 语句不返回布尔值?
【中文标题】为啥这个 if 语句不返回布尔值?【英文标题】:Why isn't this if statement returning the boolean value?为什么这个 if 语句不返回布尔值? 【发布时间】:2019-10-04 08:24:51 【问题描述】:我正在尝试制作一个程序,该程序将显示输入是否为完美数字,这意味着因素(不包括数字)加起来与该数字相同。 除了返回值之外,我还让它工作。 如果因素的总和等于输入的数字,我想返回 true,但它不会这样做。
我尝试在整个代码中移动 if 语句,但它在任何地方都不起作用。
public class Main
public static void main(String[] args)
isPerfectNumber(28);
public static boolean isPerfectNumber(int number)
if (number < 1)
return false;
int numberToTest = 1;
int sumOfFactors = 0;
while (numberToTest < number)
if (number % numberToTest == 0)
sumOfFactors += numberToTest;
numberToTest++;
if (sumOfFactors == number)
return true;
else
return false;
我希望当代码看到 sumOfFactors 将 sum= 与输入的数字相匹配时,我就会得到正确的语句,但是当这种情况发生时它不会返回 true。实际上,它没有返回任何内容,并声明没有使用返回的方法。
【问题讨论】:
能否将整个函数粘贴到问题中? 你怎么称呼它。 整个功能已经到位。 【参考方案1】:它“不起作用”,因为您没有打印结果。
public static void main(String[] args)
isPerfectNumber(28);
应该是
public static void main(String[] args)
System.out.println(isPerfectNumber(28));
这是“真实的”。还有,
if (sumOfFactors == number)
return true;
else
return false;
写的路很长
return sumOfFactors == number;
而且,如果您使用的是 Java 8+,您的 isPerfectNumber
方法可以编写为带有 IntStream
和类似 lambda 过滤器的单行器
public static boolean isPerfectNumber(int number)
return number >= 1 && IntStream //
.range(1, number) //
.filter(i -> number % i == 0) //
.sum() == number;
【讨论】:
我不敢相信我错过了这个我很抱歉我还在第一周编码只是一个愚蠢的错误。非常感谢您的回复。 写成 one-liner 和 4 行代码? ;-) --- 另外,那些//
是有原因的吗?
@Andreas 我认为他指的是它是 Java 中的一条语句,只需要一个分号。
@penguin359 我知道,但是单个 statement 和单个 line 不是一回事。 a = 1; b = 2;
可以是单行的,即使它是两个语句。一个巨大的 30 行流方法链是一条语句,但几乎不是一条线。
这是一个单行语句,为了便于阅读,我在这里拆分了它;我使用 cmets 打破界限的事实很大程度上是artifact of my IDE。以上是关于python:下面这个语句返回值为啥是False:的主要内容,如果未能解决你的问题,请参考以下文章