标识符
在 Python 中,所有标识符可以包括英文(区分大小写的)、数字以及下划线(_),但不能以数字开头。
以单下划线开头 _foo 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from xxx import * 而导入。
以双下划线开头的 __foo 代表类的私有成员,
以双下划线开头和结尾的 __ foo__ 代表 Python 里特殊方法专用的标识,如 __init__() 代表类的构造函数。
语句
Python 的代码块中必须使用相同数目的行首缩进空格数
python中单行注释采用 # 开头。
python 中多行注释使用三个单引号(‘’')或三个双引号(“”")。
# Python语句中一般以新行作为语句的结束符。但是我们可以使用【斜杠( )】将一行的语句分为多行显示,
# 语句中包含 [], {} 或 () 括号就不需要使用多行连接符。
# Python可以在同一行中使用多条语句,语句之间使用【分号(;)】分割
total = item_one +
item_two +
item_three
days = ['Monday', 'Tuesday', 'Wednesday',
'Thursday', 'Friday']
# Python可以在同一行中使用多条语句,语句之间使用【分号(;)】分割。
import sys; x = 'runoob'; sys.stdout.write(x + 'n')
# Python 可以使用【引号( ' )、双引号( " )、三引号( ''' 或 """ ) 】来表示字符串
word = 'word'
sentence = "这是一个句子。"
paragraph = """这是一个段落。
包含了多个语句"""
# print 默认输出是换行的,如果要实现【不换行需要在变量末尾加上逗号】 。
print x,y
变量
Python3 中有六个标准的数据类型:
Number(数字)
String(字符串)
List(列表)
Tuple(元组)
Set(集合)
Dictionary(字典)
Python3 的六个标准数据类型中:
不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
Number(数字): int、float、bool、complex(复数)
内部函数中,strings, tuples, 和 numbers 是不可更改的对象,全局变量必须为init变量或者在函数中用self定义;而 list,dict 等则是可以修改的对象,内部函数可以直接使用函数中的局部变量。
counter = 100 # 赋值整型变量
miles = 1000.0 # 浮点型
name = "John" # 字符串
二进制转换:
int('10',2)
> 2
bin(10)
> '0b1010'
bin(10)[2:]
ord(c) # c为字符
# 返回值:对应的十进制整数(ASCll数值)
float('-inf') # 最小值
a = b = c = 1
a, b, c = 1, 2, "john"
all() # 函数用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE,如果是返回 True,否则返回 False。
# 从左到右索引默认【0开始的】,最大范围是字符串【长度少1】
# 从右到左索引默认【-1开始的】,最大范围是【字符串开头】
# 第三个参数,参数作用是【截取的步长】
s = "a1a2···an" # n>=0
List(列表)
tinylist = [123, 'john']
print list[0] # 输出列表的第一个元素
print list[1:3] # 输出第二个至第三个元素
print list[2:] # 输出从第三个开始至列表末尾的所有元素
# 二维数组
num_list = [ [0] * 5 for i in range(2)]
dp = [[1]*n] + [[1]+[0] * (n-1) for _ in range(m-1)]
clone_node.neighbors = [self.cloneGraph(n) for n in node.neighbors]
# 加号 + 是列表连接运算符,星号 * 是重复操作
print tinylist * 2 # 输出列表两次
print list + tinylist # 打印组合的列表
list.append('Google') # 使用 append() 添加元素
del list[2] # 可以使用 del 语句来删除列表的元素
list.pop(3) # 指定pop参数,将会删除该位置的元素;无参数时默认删除最后一个元素
list.append(sublist) # 引用传递
list.append([]+sublist) # 值传递
list.append(list(path))
len([1, 2, 3]) 3 #长度
[1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] #组合
['Hi!'] * 4 ['Hi!', 'Hi!', 'Hi!', 'Hi!'] #重复
3 in [1, 2, 3] True #元素是否存在于列表中
for x in [1, 2, 3]: print x, 1 2 3 #迭代
[::-1] # 数组反转
max(list) # 求list的最大值
sum(sp[i] for i in range(n)) #求和
sum(s in jewelsSet for s in stones)
nums.sort() # 排序
score.sort(reverse=True)
list有一个sort方法,list.sort()将list进行排序,返回None
sort(*,key = None,reverse = False)
key是一个函数,这个函数的作用是从list的每个元素中提取用于当作排序依据的属性
默认是从小到大,即reserve为False的时候,如果reserve为True,排列顺序就是从大到小
def f(item):
return item[1]
list.sort(key = f)
list.sort(key = lambda item:item[0])
sorted(iterable,*,key=None,reverse=False)
sorted(dict.items(),key=lambda item:item[0])
列表解析 List Comprehensions
表达式:[expression for iter_val in iterable if cond_expr]
[expression]:最后执行的结果
[for iter_val in iterable]:这个可以是一个多层循环
[if cond_expr]:两个for间是不能有判断语句的,判断语句只能在最后;顺序不定,默认是左到右。
print[(x,y)for x in [1,2]for y in [3,4]]
for (k1, v1), (k2, v2) in zip(dict_one, dict_two): # 遍历两个list或者dict
neighbors = [(1,0), (1,-1), (0,-1), (-1,-1), (-1,0), (-1,1), (0,1), (1,1)]
for neighbor in neighbors:
r = (row + neighbor[0])
c = (col + neighbor[1])
for u,v in neighbors:
s = [1, 2, 3, 4, 5]
# 从指定索引1开始
for index, value in enumerate(s, 1):
list(str(n)) # int转化为字符串,转化为list
next(word for word,f in freq.items() if f==maxFreq) # next()取list第一个值
map(max, grid) # 求每行的最大值
map(max, zip(*grid)) # 求每列的最大值
strs = map(str,nums) # 转换为list(str)
r1,m1 = map(int, num1[:-1].split('+')) # list(str)转化为list(int)
list(map(list,numSet))
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b) # 返回一个对象
>>> zipped
<zip object at 0x103abc288>
>>> list(zipped) # list() 转换为列表
[(1, 4), (2, 5), (3, 6)]
>>> list(zip(a,c)) # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> a1, a2 = zip(*zip(a,b)) # 与 zip 相反,zip(*) 可理解为解压,返回二维矩阵式
>>> list(a1)
[1, 2, 3]
>>> list(a2)
[4, 5, 6]
tuple(元组)
# 元组用 () 标识。内部元素用逗号隔开。但是元组不能二次赋值,相当于只读列表。
tinytuple = (123, 'john')
Dict(字典)
# 字典用"{ }"标识。字典由索引(key)和它对应的值value组成。
dict = {}
dict['one'] = "This is one"
dict[2] = "This is two"
# 值可以取任何数据类型,但键必须是不可变的,如字符串,数字或 元组 。 用列表就不行
dict[tuple(count)]
# 以列表返回字典中的所有值
dict.values()
list(dict.values())
for key in dict:
print (key)
tinydict = {'name': 'runoob','code':6734, 'dept': 'sales'}
print dict['one'] # 输出键为'one' 的值
print dict[2] # 输出键为 2 的值
print tinydict # 输出完整的字典
print tinydict.keys() # 输出所有键
print tinydict.values() # 输出所有值
maxFreq = max(freq.values()) # 求value的最大值
tinydict['Age'] = 8 # 更新
tinydict['School'] = "RUNOOB" # 添加
del tinydict['Name'] # 删除键是'Name'的条目
tinydict.clear() # 清空字典所有条目
del tinydict # 删除字典
defaultdict(list) defaultdict(int) # defaultdict类的初始化函数接受一个类型作为参数,当所访问的键不存在的时候,可以实例化一个值作为默认值:
count.get(c, 0) # 默认值为0
items():返回所有(key,value)元组的数组,类似于‘列表’
[s for s, c in cnt.items() if c == maxCnt] # 遍历dict
dict排序
sorted(dict.items(),key=lambda item:item[0])
items = [(-val, key) for key, val in count.items()] # 变更为tuple
for val, key in sorted(items): # 遍历排序后的tuple
set(集合)
parame = {value01,value02,...}
或者
set(value)
s.add( x )
s.update( x ) # 参数可以是列表,元组,字典等
s.remove( x )
s.discard( x )
len(s)
s.clear()
x in s
for key in set:
print (key)
运算符
/ 除 - x除以y
% 取模 - 返回除法的余数
** 幂 - 返回x的y次幂
// 取整除 - 返回商的整数部分(向下取整)
and x and y 布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。
or x or y 布尔"或" - 如果 x 是非 0,它返回 x 的计算值,否则它返回 y 的计算值。
not not x 布尔"非" - 如果 x 为 True,返回 False 。
is is 是判断两个标识符是不是引用自一个对象
is not is not 是判断两个标识符是不是引用自不同对象
is 与 == 区别:
is 用于判断两个变量引用对象是否为同一个(同一块内存空间), == 用于判断引用变量的值是否相等。
条件语句
if num == 3: # 判断num的值
print 'boss'
elif num == 2:
print 'user'
elif num == 1:
print 'worker'
elif num < 0: # 值小于零时输出
print 'error'
else:
print 'roadman' # 条件均不成立时输出
循环语句
i = 1
while i < 10:
i += 1
if i%2 > 0: # 非双数时跳过输出
continue
print i # 输出双数2、4、6、8、10
i = 1
while 1: # 循环条件为1必定成立
print i # 输出1~10
i += 1
if i > 10: # 当i大于10时跳出循环
break
flag = 1
while (flag): print 'Given flag is really true!'
fruits = ['banana', 'apple', 'mango']
for fruit in fruits: # 第二个实例
print ('当前水果: %s'% fruit)
fruits = ['banana', 'apple', 'mango']
for index in range(len(fruits)):
print ('当前水果 : %s' % fruits[index])
for i in reversed(range(length - 1)): # 逆序
for letter in 'Python': # 第一个实例
if letter == 'h':
break
print '当前字母 :', letter
for i, ch in enumerate(s):
if frequency[ch] == 1:
return i
diff = [(a,b) for a,b in zip(s,goal) if a!=b]
字符串
+ 字符串连接
>>>a + b
'HelloPython'
* 重复输出字符串
>>>a * 2
'HelloHello'
[] 通过索引获取字符串中字符
>>>a[1]
'e'
[ : ] 截取字符串中的一部分
>>>a[1:4]
'ell'
in 成员运算符 - 如果字符串中包含给定的字符返回 True
>>>"H" in a
True
not in 成员运算符 - 如果字符串中不包含给定的字符返回 True
>>>"M" not in a
True
r/R 原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母"r"(可以大小写)以外,与普通字符串有着几乎完全相同的语法。
>>>print r'n'
n
>>> print R'n'
n
strs = 'abcd'
for ch in strs:
print(ch)
strs = 'abcd'
for index in range(len(strs)):
print(strs[index], end=' ')
res += 'a'*3 # 'aaa'
s.split(" ") # 将字符串分割成单词列表
" ".join(list) # 将单词列表转换为字符串,以空格分隔
f'{bulls}A{cows}B' # {}计算格式化
字符串格式化
print "My name is %s and weight is %d kg!" % ('Zara', 21)
%s 格式化字符串
%d 格式化整数
%f 格式化浮点数字,可指定小数点后的精度
三引号
允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符
>>> hi = '''hi
there'''
>>> hi # repr()
'hinthere'
>>> print hi # str()
hi
there
函数
string.count(str, beg=0, end=len(string))
返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数
string.endswith(obj, beg=0, end=len(string))
检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.
string.find(str, beg=0, end=len(string))
检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1
string.format()
格式化字符串
string.index(str, beg=0, end=len(string))
跟find()方法一样,只不过如果str不在 string中会报一个异常.
string.join(seq)
以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
string.replace(str1, str2, num=string.count(str1))
把 string 中的 str1 替换成 str2,如果 num 指定,则替换不超过 num 次.
string.split(str="", num=string.count(str