Python - Java vs Python 语法对比
基础语法
运算符优先级
建议在优先级不清晰的时候打上括号
URL:http://www.taodudu.cc/news/show-4803654.html?action=onClick
for 循环
能否自主决定i的值
java - “可以” 自主决定i循环到哪个值
int i = 0; for( ; i < 10; i++){ //.... i = randomValue; }
python - “不可以” 自主决定i循环到哪个值
for i in range(len(nums)): #.... #希望自主决定下次循环的index...但是python不支持 i = randomValue; # 会将这里的i视为新的变量,和循环的index i不一样
两层循环,怎么自由控制外层循环的i值
java - 两层for循环,自由控制外层循环点
int i = 0; for(; i < 10; i++){ for(int j = 0; j < 10; j++){ //..... i = 5; //自由决定外层循环点 } }
python - - 两层for循环,“不能” 自由控制外层循环点。。需要将外层改为while循环
指数、取余
python
#指数 MOD = 10**9 + 1 #取余 res = num1 % MOD
int, float最大值、最小值
Java - Integer.MAX_VALUE/Integer.MIN_VALUE
Python
- python2 最大整数值:sys.maxint,最小整数值:-sys.maxint-1
- python3 最大整数值:sys.maxsize,最小整数值:-sys.maxsize-1
- python3 最大浮点数值:float('inf'),最小浮点数值:-float('inf')
URL:
https://blog.csdn.net/uncle_ll/article/details/104367660
https://blog.csdn.net/weixin_43268010/article/details/120256212
import sys max_value = sys.maxsize min_value = -sys.maxsize - 1
自增操作
Java - ++
Python - 没有++,只能用 a = a+1或 a+=1代替
布尔值
Java - Boolean
...
Python - bool
注意:Python中所有数据类型的值自带布尔值。如此多的数据类型中只需要记住只有0、None、空、False的布尔值为False,其余的为True。
以下是 Python 中的假值:
- 数字零(0)
- 空字符串('')
- False
- None
- 空列表([])
- 空元组(())
- 空字典({})
除了以上数据之外的其他的值都是真值。
print(bool(0)) print(bool(None)) print(bool('')) print(bool([])) print(bool({})) print(bool(False)) #输出 False False False False False False
and & 区别
Python -
&是位运算符,and为逻辑运算符。
- &会将左右两个整数转换为二进制进行计算,当同位都为1时取1,否则取0。例如2&3:10&11=10,故等于2。
- and运算是判断是否为0,0为False,非0为True,结果为False则返回0/False,True则返回and运算符右侧的值。例如2 and 3 = 3
原文链接:https://blog.csdn.net/dogyii/article/details/122824087
and or
Java
...
Python - 注意有两种用法(1.判断语句;2.都是数字)
https://blog.csdn.net/xiaofengdada/article/details/122382203
python中的逻辑操作符and 和or,也叫惰性求值,由于是惰性,只要确定了值就不往后解析代码了
取反
Java - “逻辑取反”!,“按位取反” ~
。。。
Python - “逻辑取反”not,“按位取反” ~
1、True和False被逻辑取反时要使用not。not是逻辑取反,而~是按位取反。
2、True和False相对应的值为1和0,~True相当于1按位取反,结果为-2,not True的结果为False。
print(True) print(~True) print(not True) # 结果是: True -2 False # 类似的,~False的结果是1,not False 的结果才是True print(False) print(~False) print(not False) #结果是: False -1 True
try catch
Python - try/except
https://blog.csdn.net/lwgkzl/article/details/81059433
try: code #需要判断是否会抛出异常的代码,如果没有异常处理,python会直接停止执行程序 except: #这里会捕捉到上面代码中的异常,并根据异常抛出异常处理信息 #except ExceptionName,args: #同时也可以接受异常名称和参数,针对不同形式的异常做处理 code #这里执行异常处理的相关代码,打印输出等 else: #如果没有异常则执行else code #try部分被正常执行后执行的代码 finally: code #退出try语句块总会执行的程序
三元操作符
https://www.jb51.net/article/223959.htm
java
int c = a > b ? a : b
python
[statement_1] if [expression] else [statement_2]
以下程序中的三元运算符根据条件 a>b 分别计算为 True 或 False 来选择 a 或 b。
a, b = 2, 5 # 得到a,b的最大值 max = a if a > b else b print(max) # 5;运行程序,由于 a> b 返回 False,因此选择了 b。
类型转换
str 互转 list —— usage: 当想修改字符串中的单个字符时
java
python
由于str是不可变类型,因此无法直接去修改某个索引的字符,但可以读:
s = 'abcdefg' s1 = s[0] # 合法,结果为 s1 = 'a' s[0] = 'b' # 不合法,str类型是不可变类型,不能直接修改某个索引下的值
有时遍历str时,需要及时记录修改字符,那就必须先转化为list,再转回str
>>> s='abcdef' #原字符串 >>> s1=list(s) #将字符串转换为列表 >>> s1 ['a', 'b', 'c', 'd', 'e', 'f'] #列表的每一个元素为一个字符 >>> s1[4]='E' #将列表中的第5个字符修改为E >>> s1[5]='F' #将列表中的第5个字符修改为E >>> s1 ['a', 'b', 'c', 'd', 'E', 'F'] >>> s=''.join(s1) #用空串将列表中的所有字符重新连接为字符串 >>> s 'abcdEF' #新字符串
int 转 str
Java - String.valueOf(int)
Python - str(int)
int 转 char
Java - 0到9的int,可以用'0' + 9转换
Python - 没有专门的char类型,用str类型代替
https://blog.csdn.net/sinat_38682860/article/details/107935720
准确地讲,Python没有专门处理字节的数据类型。但由于str既是字符串,又可以表示字节,所以,字节数组=str
int 互转 float
参考wiki:
https://vimsky.com/examples/usage/how-to-convert-float-to-int-in-python.html
https://blog.csdn.net/weixin_46658699/article/details/110098537
int 转 float - float()
对于float()函数,它只有一个格式:float([x])。该格式的功能是将一个数字或字符串转换成浮点数(返回一个十进制浮点型数值(小数))。和上面的int([x])有些类似。
float([x])中x的数值可以是十进制的数(小数和整数),bool类型(布尔值True和False)或表示十进制数字的字符串(如:‘7’、‘-7’等)。
>>> float()#如果未给定参数,则返回0.0。 0.0 >>> float(1)#如果参数是整数,将返回等值的浮点数(Python的浮点精度内) 1.0 >>> float(1.233)#如果参数是浮点数,将返回等值的浮点数(Python的浮点精度内) 1.233 >>> float(-1.233)#这里需要注意的是,如果参数超出Python浮点范围,将会引发OverflowError错误 -1.233 >>> float('7') 7.0 >>> float('-7.7') -7.7 >>> float(True)#布尔值True 对应1.0 1.0 >>> float(False)#布尔值False 对应0.0 0.0 >>> float('inf')#“inf”、“Inf”、“INFINITY”和“iNfINity”都是可以被float接受的正无穷大的拼写方式 inf >>> float('Inf') inf >>> float('INFINITY') inf >>> float('-inf')#负无穷大 -inf >>>
float 转 int - int() 可能不稳定
该格式的功能为截取数字的整数部分或者将字符串转换成一个整数。简单的说就是将一个字符串(这里需要注意的是int()函数不接受带小数的数字字符串)或数字(可正,可负,可为零,可带小数点)转换为整型。
>>> int()#如果不给参数,则返回 0 0 >>> int(0) 0 >>> int(1.23)#加号 “+” 对值无影响 故一般省略 1 >>> int(-1.23) -1 >>> int('4') 4 >>> int("4")#加号 “+” 对值无影响 故一般省略 4 >>> int('-4') -4 >>> int('1.23')#int()函数不接受带小数的数字字符串 Traceback (most recent call last): File "<pyshell#7>", line 1, in <module> int('1.23') ValueError: invalid literal for int() with base 10: '1.23' >>> int('-1.23')#int()函数不接受带小数的数字字符串 Traceback (most recent call last): File "<pyshell#8>", line 1, in <module> int('-1.23') ValueError: invalid literal for int() with base 10: '-1.23' >>> int('a')#单纯这样写是不可的! Traceback (most recent call last): File "<pyshell#9>", line 1, in <module> int('a') ValueError: invalid literal for int() with base 10: 'a' >>>
但该方法存在不稳定性:
# example of unpredictable # behaviour of int() num1 = 5.9 num2 = 5.99999999999999999999 num1 = int(num1) num2 = int(num2) print(num1, num2, sep = '\n') #输出: 5 6
float 转 int - math.floor()/ceil() 更稳定
可以使用 math.floor() 函数将浮点值转换为不大于输入的 int 值,也可以使用 math.ceil() 函数将其转换为大于输入的最小整数的 int 值。为了使用这些方法,要导入数学模块。
工具类
队列、优先队列(最小堆),栈,双端队列
Java - LinkedList可以实现queue,stack,deque
https://www.cnblogs.com/frankcui/p/12125210.html#_label19
Python - deque可以实现queue, stack, deque
https://blog.csdn.net/Night__owl/article/details/122709406
# deque实现栈,队列 from collections import deque stack = deque() stack.append(1) stack.append(3) stack.append(5) stack.append(7) stack.append(1) print(stack) # 加入栈尾 print("\n-----加入栈尾-----") stack.appendleft(0) print(stack) print(f"1 的个数为 {stack.count(1)}") # 栈尾出栈 print("\n-----栈尾出栈-----") stack.popleft() print(stack) # 反转栈 print("\n-----反转栈-----") stack.reverse() print(stack) print("\n-----栈的长度-----") print(len(stack))
output:
deque([1, 3, 5, 7, 1]) -----加入栈尾----- deque([0, 1, 3, 5, 7, 1]) 1 的个数为 2 -----栈尾出栈----- deque([1, 3, 5, 7, 1]) -----反转栈----- deque([1, 7, 5, 3, 1]) -----栈的长度----- 5
栈 stack
java
python
除了使用上面说的全能deque以外,更简便的实现是python自带的list,就能实现stack操作
class Solution: def removeStars(self, s: str) -> str: st = [] #声明一个list,就能当做stack来使用 for c in s: if c == '*': st.pop() #弹出最右侧的元素 else: st.append(c) #在最右侧加入元素 return ''.join(st)
最大堆,最小堆
Java - PriorityQueue<T>
https://www.cnblogs.com/frankcui/p/12125210.html#_label23
Python - PriorityQueue优先队列(最小堆),heapq库(最小堆)
优先队列:https://blog.csdn.net/Night__owl/article/details/122709406
heapq库:https://blog.csdn.net/wangws_sb/article/details/124108070
注意:python中的heapq库只有最小堆,没有最大堆,当使用最大堆时,可以在插入元素时将元素取反,弹出是也取反。
常见API:
import heapq # [2,0,4,1] # 1.创建堆 # 方法一:定义一个空列表,然后使用heapq.heqppush(item)函数把元素加入到堆中 item = 2 heap = [] heapq.heappush(heap,item) # 方法二:使用heapq.heapify(list)将列表转换为堆结构 heap = [2,0,4,1] heapq.heapify(heap) # 2.heapq.heappush() 添加新元素 num num = 3 heapq.heappush(heap,num) # 3.heapq.heappop() 删除并返回堆顶元素 heapq.heappop(heap) # 4.heapq.heappushpop() 比较添加元素num与堆顶元素的大小:如果num>堆顶元素,删除并返回堆顶元素,然后添加新元素num;如果num<堆顶元素,返回num,原堆不变 # 其实也就等价于 添加新元素num,然后删除并返回堆顶元素 num = 0 heapq.heappushpop(heap,num) # 5.heapq.heapreplace() 删除并返回堆顶元素,然后添加新元素num num = 5 heapq.heapreplace(heap,num) # 6. heapq.merge() 合并多个排序后的序列成一个排序后的序列, 返回排序后的值的迭代器。 heap1 = [1,3,5,7] heap2 = [2,4,6,8] heap = heapq.merge(heap1,heap2) print(list(heap)) # 7.heapq.nsmallest() 查询堆中的最小n个元素 n = 3 heap = [1,3,5,7,2,4,6,8] print(heapq.nsmallest(n,heap)) # [1,2,3] # 8.heapq.nlargest() 查询堆中的最大n个元素 n = 3 heap = [1,3,5,7,2,4,6,8] print(heapq.nlargest(n,heap)) # [8,7,6]
内置函数 - sort(),range(),len()
sort()
range()
len()
https://www.runoob.com/python/python-built-in-functions.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2021-06-17 IDEA - 断点的导入导出