JAVA程序员学python-1.变量及数据类型

本文详细介绍了Python中的基本数据类型,包括整数、浮点数、字符串、布尔值及空值的概念与用法,并深入探讨了list、dict和set等复合数据类型的特性与操作方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

账号设置半天造成了互绑,现在用这个账号了,此篇文章在原来的账号中发表过....

千里之行始于足下,以后我会将自己学到用到的知识结合自己的理解分享出来~

1.整数
Python可以处理任意大小的整数,当然包括负整数,在Python程序中,整数的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等。
计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等。
十进制和十六进制可以直接相加
例:print 45678+0x12fd2
输出为十进制

2.浮点数
浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x10^9和12.3x10^8是相等的。浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x10^9就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。
整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。

3.字符串
字符串是以''或""括起来的任意文本,比如'abc',"xyz"等等。请注意,''或""本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'只有a,b,c这3个字符。
例:print "Learn Python in imooc"
注意:如果字符串中含有'可以用""来括起,含有"可以用''来括起。如果同时含有两种则需用\来转义
例:print "I\'m a \"doctor\""
如果不想使用转义,python有一种不需要转义符方法,raw字符串,输入r'....'即可,但不能包含",如果需要完全转义或换行,则是r'''...'''
例:print r'''"To be, or not to be": that is the question.
Whether it's nobler in the mind to suffer.'''

4.布尔值
布尔值和布尔代数的表示完全一致,一个布尔值只有True、False两种值,要么是True,要么是False,在Python中,可以直接用True、False表示布尔值(请注意大小写),也可以通过布尔运算计算出来。
布尔值可以用and、or和not运算。
and运算是与运算,只有所有都为 True,and运算结果才是 True。
or运算是或运算,只要其中有一个为 True,or 运算结果就是 True。
not运算是非运算,它是一个单目运算符,把 True 变成 False,False 变成 True。
例:print 100 < 99
注意:
在Python中,布尔类型还可以与其他数据类型做 and、or和not运算
例:
a = True
print a and 'a=T' or 'a=F'
结果:'a=T'
Python把0、空字符串''和None看成 False,其他数值和非空字符串都看成 True,所以:显示a=T这个False
短路计算。
1. 在计算 a and b 时,如果 a 是 False,则根据与运算法则,整个结果必定为 False,因此返回 a;如果 a 是 True,则整个计算结果必定取决与 b,因此返回 b。
2. 在计算 a or b 时,如果 a 是 True,则根据或运算法则,整个计算结果必定为 True,因此返回 a;如果 a 是 False,则整个计算结果必定取决于 b,因此返回 b。

5.空值
空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。
此外,Python还提供了列表、字典等多种数据类型,还允许创建自定义数据类型

小总结:
不同于java,python中没有int long整数的区分,float,double浮点数的区分,python只有整数和浮点数,String类型可以有''或""两种表示形式,与或非为and or not。python的空值为None,而不是java中的null

6.print
print加空格输出信息,print可以通过加逗号一起输出,中间会补上空格
例:print "I","love","you"
print也可以直接运行算法信息
例:print "1+2=",1+2
python2.7与3重要区别
2.7中print可以直接输出,3的时候必须为print(),因为python3中输出为函数

7.注释
python中的注释是#

8变量
不用于java的静态语言要声明类型,python不需要声明类型
例:
java
int a=123; String b="123";
python
a=123;b="123";

9list
Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。
list是数学意义上的有序集合,也就是说,list中的元素是按照顺序排列的。
Python是动态语言,所以list中包含的元素并不要求都必须是同一种数据类型,我们完全可以在list中包含各种数据:
>>> L = ['Michael', 100, True]
如果L = [95.5,59,85]这样的序列,可以按倒序排出L[-1],L[-2]等
添加新元素
L.append("paul")
将元素添加到某个位置
L.insert(0,"paul")
删除元素,不加数字默认删除最后一位,加数字删除序号的位置
L.pop(0)
赋值元素
L[2]="haha"
注意:tuple类似于list,但是其元素在创建后不能修改其中的变量,append,pop均不可以,类似于java中的final后的变量
例:t = (0,1,2,3,4,5,6,7,8,9)
如果单元素的tuple输出的话需要将后加逗号,否则只会输出当前元素,而不是tuple,list没这个问题
例:t=('haha',)
可变的tuple:在tuple中加入list并进行改变
t=(0,2,[2,3])
切片操作
取一个list的部分元素是非常常见的操作。一个list如下:
>>> L = ['Adam', 'Lisa', 'Bart', 'Paul']
取前3个元素,应该怎么做?
笨办法:
>>> [L[0], L[1], L[2]]
['Adam', 'Lisa', 'Bart']
之所以是笨办法是因为扩展一下,取前N个元素就没辙了。取前N个元素,也就是索引为0-(N-1)的元素,可以用循环:
>>> r = []
>>> n = 3
>>> for i in range(n):
... r.append(L[i])
...
>>> r
['Adam', 'Lisa', 'Bart']
对这种经常取指定索引范围的操作,用循环十分繁琐,Python提供了切片(Slice)操作符,能大大简化这种操作。对应上面的问题,取前3个元素,用一行代码就可以完成切片:
>>> L[0:3]
['Adam', 'Lisa', 'Bart']
L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素。如果第一个索引是0,还可以省略:
>>> L[:3]
['Adam', 'Lisa', 'Bart']
也可以从索引1开始,取出2个元素出来:
>>> L[1:3]
['Lisa', 'Bart']
只用一个 : ,表示从头到尾:
>>> L[:]
['Adam', 'Lisa', 'Bart', 'Paul']
因此,L[:]实际上复制出了一个新list。切片操作还可以指定第三个参数:
>>> L[::2]
['Adam', 'Bart']
第三个参数表示每N个取一个,上面的 L[::2] 会每两个元素取出一个来,也就是隔一个取一个。
把list换成tuple,切片操作完全相同,只是切片的结果也变成了tuple。
python支持倒序,所以切片同时可以采用倒序切片
L[-2:-1]
注意:由于python没有截取字符串的函数,可以通过切片字符串实现,如下
>>> 'ABCDEFG'[:3]
'ABC'

10dict
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59
}
类似于java中的map对象,我们把名字称为key,对应的成绩称为value,dict就是通过 key 来查找 value。花括号 {} 表示这是一个dict,然后按照 key: value, 写出来即可。最后一个 key: value 的逗号可以省略。
特点:
1dict的第一个特点是查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。
2dict的第二个特点就是存储的key-value序对是没有顺序的
3dict的第三个特点是作为 key 的元素必须不可变,Python的基本类型如字符串、整数、浮点数都是不可变的,都可以作为 key。但是list是可变的,就不能作为 key。
判断dict中的个数:len(d)
获取方法:
java:map.get(key)
python:dict.get(key) 或 dict[key]
注:直接dict[key]获取可能会有keyerror,dict.get(key)空值是None,或者可以做判断
if 'Adam' in d:
print d['Adam']
新增元素
java:map.put(key,value);
python:dict[key]=value
循环
循环key
for key in dict:
循环value
for value in dict.values():或for value in dict.itervalues():推荐使用后一种
两个方法不同之处
1. values() 方法实际上把一个 dict 转换成了包含 value 的list。
2. 但是 itervalues() 方法不会转换,它会在迭代过程中依次从 dict 中取出 value,所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存。
3. 打印 itervalues() 发现它返回一个 <dictionary-valueiterator> 对象,这说明在Python中,for 循环可作用的迭代对象远不止 list,tuple,str,unicode,dict等,任何可迭代对象都可以作用于for循环,而内部如何迭代我们通常并不用关心。
如果一个对象说自己可迭代,那我们就直接用 for 循环去迭代它,可见,迭代是一种抽象的数据操作,它不对迭代对象内部的数据有任何要求。
同时循环key和value
items() 方法把dict对象转换成了包含tuple的list,我们对这个list进行迭代,可以同时获得key和value:
>>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
>>> print d.items()
[('Lisa', 85), ('Adam', 95), ('Bart', 59)]
>>> for key, value in d.items():
... print key, ':', value
...
Lisa : 85
Adam : 95
Bart : 59
和 values() 有一个 itervalues() 类似,items() 也有一个对应的 iteritems(),iteritems() 不把dict转换成list,而是在迭代过程中不断给出 tuple,所以, iteritems() 不占用额外的内存。
删除有两种方法
dict.pop(key) 或 del dict[key]

比较dict和list:
dict的特点是查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。而list的查找速度随着元素增加而逐渐下降。不过dict的查找速度快不是没有代价的,dict的缺点是占用内存大,还会浪费很多内容,list正好相反,占用内存小,但是查找速度慢。由于dict是按 key 查找,所以,在一个dict中,key不能重复。

11set
set 持有一系列元素,这一点和 list 很像,但是set的元素没有重复,而且是无序的,这点和 dict 的 key很像。创建 set 的方式是调用 set() 并传入一个 list,list的元素将作为set的元素。
因为set不能包含重复的元素,所以,当传入包含重复元素会被去掉
>>> s = set(['A', 'B', 'C', 'C'])
>>> print s
set(['A', 'C', 'B'])
>>> len(s)
3
判断是否存在
>>> 'A' in s
True
set使用中有一点功能很像java中的索引,比如先在set中放入mon-sun的星期几信息,然后拿其中一个进行比较,使用方便
weekdays = set(['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN'])
x = '???' # 用户输入的字符串
if x in weekdays:
print 'input ok'
else:
print 'input error'
循环
for this in s:
添加和删除,添加重复不会报错,删除不存在会报错
s.add(4)
s.remove(4)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值