python学习笔记——基础
python学习笔记——基础
input()
和print()
使用
name = input('please enter your name:')
print('helllo,', name)
please enter your name:lishangfeng
helllo, lishangfeng
input()
返回的数据类型是str
,str
不能直接和整数比较,必须先把str
转换成整数。
python提供了int()
函数来完成这件事。
s = input('birth: ')
birth = int(s)
if birth < 2000:
print('00前')
else:
print('00后')
birth: 2009
00后
转义符 \
使用
print('I\'m \"OK\"!')
I'm "OK"!
print(r'''hello,\n
world''')
hello,\n
world
print('''hello,\n
world''')
hello,
world
字符编码:参看 廖雪峰教程
python字符串
python3,字符串是以unicode编码
list
python内置的一种数据类型,list是一种有序的集合,可以随时添加和删除其中的元素。
len()
函数可以获得list元素的个数;
用索引访问list中每一个位置的元素,索引是从0
开始的。
当索引超出范围时,python会报IndexError
错误,要确保索引不要越界,最后 一个元素的索引是len(classmates) - 1
。
获取最后一个元素,除计算索引位置外,可用-1
做索引,直接获取最后有一个元素:
classmates = ['forsch','juan','sysrch'] #定义一个list classmates
print(classmates)
print(len(classmates))
print(classmates[0])
print(classmates[1])
print(classmates[2])
print(classmates[3])
['forsch', 'juan', 'sysrch']
3
forsch
juan
sysrch
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-37-7b183be0cfed> in <module>()
5 print(classmates[1])
6 print(classmates[2])
----> 7 print(classmates[3])
IndexError: list index out of range
print(classmates[-1])
sysrch
print(classmates[-2])
juan
print(classmates[-3])
forsch
print(classmates[-4])
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-41-699b6e2a7bd6> in <module>()
----> 1 print(classmates[-4])
IndexError: list index out of range
list是一个可变的有序表,所以可以往list中追加元素到末尾,使用append()
classmates.append('juney')
print(classmates)
['forsch', 'juan', 'sysrch', 'juney']
也可以把元素插入到指定的位置,比如索引号为2的位置,使用insert()
classmates.insert(2, 'jhon')
print(classmates)
['forsch', 'juan', 'jhon', 'sysrch', 'juney']
删除list末尾的元素,使用pop()
方法:
print(classmates.pop())
print(classmates)
juney
['forsch', 'juan', 'jhon', 'sysrch']
删除指定位置的元素,用pop(i)
方法,i
是索引位置:
print(classmates.pop(1))
print(classmates)
juan
['forsch', 'jhon', 'sysrch']
若要把某个元素替换成别的元素,可以直接赋值给对应的索引位置:
classmates[0] = 'root'
print(classmates)
['root', 'jhon', 'sysrch']
list 里面的元素的数据类型可以不同;
list元素也可以是另一个list;
L = ['Apple', 123, True]
s = ['python', 'java', ['asp','php'],'scheme']
print(len(s))
#获取 'php';s可看作一个二维数组
print(s[2][1])
4
php
若list中一个元素都没有,就是一个空的List,它的长度为0:
L = []
print(len(L))
0
tuple
元组:tuple,tuple和list非常相似,但,tuple一旦被初始化就不能修改
classmates = ('forsch', 'michle', 'junny')
只有1个元素的tuple定义时必须加一个逗号,
,来消除歧义
t = (1,)
t
(1,)
“可变的”tuple
t = ('a', 'b', ['A', 'B'])
print(t)
t[2][0] = 'X'
t[2][1] = 'Y'
print(t)
('a', 'b', ['A', 'B'])
('a', 'b', ['X', 'Y'])
uple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向’a’,就不能改成指向’b’,指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的
循环
range()
函数,可以生成一个整数序列,再通过list()
函数可以转换为list.
sum = 0
for x in list(range(5)):
sum = sum + x
print(sum)
10
while
循环,只要满足条件,就不断循环,条件不满足时退出循环。eg:计算100以内所有奇数之和,可用while循环实现:
sum =0
n = 99
while n > 0:
sum = sum +n
n = n - 2
print(sum)
2500
break
语句,在循环中可以提前退出循环。
n = 1
while n <= 100:
if n > 10:
break
print(n)
n = n + 1
print('END')
1
2
3
4
5
6
7
8
9
10
END
continue
语句,跳过当前的这次循环,直接开始下一次循环
n = 0
while n < 10:
n = n + 1
if n % 2 == 0: #如果n是偶数,执行continue语句
continue #continue语句会直接继续下一轮循环,后续的print()语句不会执行
print(n)
1
3
5
7
9
break
语句可以在循环过程中直接退出循环,而continue
语句可以提前结束本轮循环,并直接开始下一轮循环。这两个语句通常都必须配合if
语句使用。
要特别注意,不要滥用break
和continue
语句。break
和continue
会造成代码执行逻辑分叉过多,容易出错。大多数循环并不需要用到break
和continue
语句,上面的两个例子,都可以通过改写循环条件或者修改循环逻辑,去掉break
和continue
语句。
dict
dict
全称dictionary
,在其他语言中也称为map
,使用键-值(key-value
)存储,具有极快的查找速度。
d = {'sunny': 98, 'forsch': 93, 'lucy': 85}
print(d['forsch'])
print(d)
93
{'sunny': 98, 'forsch': 93, 'lucy': 85}
把数据放入dict的方法,除了初始化时指定外,还可通过key放入:
由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉:
d['forsch'] = 100
print(d['forsch'])
100
d['forsch'] = 0
print(d['forsch'])
0
判断 key 是否存在
-
通过
in
判断 -
通过
get()
方法,若key不存在,返回None
,或者自己指定的value;(返回None时,python的交互环境不显示结果)
'tony' in d
False
d.get('tony')
d.get('tony', -1)
-1
删除key,用pop(key)
方法,对应的value也会从dict中删除:
d.pop('forsch')
print(d)
{'sunny': 98, 'lucy': 85}
dict内部存放的顺序和key放入的顺序是没有关系的。
和list比较,dict有以下几个特点:
- 查找和插入的速度极快,不会随着key的增加而变慢;
- 需要占用大量的内存,内存浪费多。
而list相反:
- 查找和插入的时间随着元素的增加而增加;
- 占用空间小,浪费内存很少。
所以,dict是用空间来换取时间的一种方法。
dict可以用在需要高速查找的很多地方,在Python代码中几乎无处不在,正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象。
这是因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash)。
要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key:
set
set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
要创建一个set,需要提供一个list作为输入集合:
s = set([1, 2, 3])
s
{1, 2, 3}
传入的参数[1, 2, 3]
是一个list,而显示的{1,2,3}
只是告诉你这个set内部有1,2, 3这3个元素,显示的顺序也不表示set是有序。
重复元素在set中自动被过滤:
s = set([1, 1, 2, 2, 3, 3])
s
{1, 2, 3}
添加元素到set中
通过add(key)
方法可以添加元素到set中,可重复添加,但不会有效果:
s.add(4)
s
{1, 2, 3, 4}
s.add(4)
s
{1, 2, 3, 4}
删除元素 可通过remove(key)
方法删除元素:
s.remove(4)
s
{1, 2, 3}
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:
s1 = set([1, 2, 3])
s2 = set([2, 3, 4])
print(s1 & s2)
print('-------------')
print(s1 | s2)
{2, 3}
-------------
{1, 2, 3, 4}
set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。
不可变对象
str
是不可变对象,list
是可变对象
对于可变对象,比如list,对list进行操作,list内部的内容是会变化的
a = ['c', 'b', 'a']
a.sort()
a
['a', 'b', 'c']
对不可变对象,如str
a = 'abc'
b = a.replace('a', 'A')
print(a)
print(b)
abc
Abc