第2章
2.1 列表和元组(python除字符串外的另外两种序列结构)
2.1.1 列表
使用[]或list()创建列表
允许出现相同元素 列表由1个或者多个元素组成 适合利用顺序和位置定位某一元素
list1 = [ ]
list1 = [ 'monday' , 'huang' , '1' , '1' , '铭' ]
empty_list = list ( )
使用list()将其他数据类型转换成列表
>> > list ( 'cat' )
[ 'c' , 'a' , 't' ]
>> > a_tuple = ( 'huang' , 'jian' , 'ming' )
>> > list ( a_tuple)
[ 'huang' , 'jian' , 'ming' ]
指定范围并使用切片提取元素
>> > marxes = [ 'huang' , 'jian' , 'ming' ]
>> > marxes[ 0 : 2 ]
[ 'huang' , 'jian' ]
>> > marxes[ : : 2 ]
[ 'huang' , 'ming' ]
>> > marxes[ : : - 2 ]
[ 'ming' , 'huang' ]
>> > marxes[ : : - 1 ]
[ 'ming' , 'jian' , 'huang' ]
列表操作
a_list.append('a_str')
list1. extend( list2)
list1 += list2
>> > a_list = [ 'huang' , 'jian' , 'ming' ]
>> > a_list. insert( 1 , 'huang' )
[ 'huang' , 'huang' , 'jian' , 'ming' ]
>> > del a_list[ - 3 ]
[ 'huang' , 'jian' , 'ming' ]
a_list. remove( 'huang' )
>> > a_list. pop( 1 )
'ming'
>> > a_list
[ 'jian' ]
>> > a_list. index( 'huang' )
0
>> > 'huang' in a_list
True
>> > a_list = [ 'huang' , 'huang' , 'jian' , 'ming' ]
>> > a_list. count( 'huang' )
2
重新排列元素
list.sort(reverse=True/False)会对原列表进行排序,改变原列表内容 通用函数sorted()则会返回排好序的列表副本,原列表内容不变 数字元素会默认地被排成从小到大的升序,字符串则会按照字母表顺序排序(可通过reverse=True/False转换)
list2 = list1.copy()复制
使用=赋值和list.copy()不同,赋值后改变会影响原列表,复制则不会
2.1.2 元组(tuple元组不可变,一旦被定义就无法在进行增删改查等操作)
>> > empty_tuple = ( )
( )
>> > one_tuple = 'huang' ,
( 'huang' , )
>> > marx_tuple = 'huang' , 'jian'
( 'huang' , 'jian' )
>> > a_tuple = 'huang' , 'jian' , 'ming' >> > a, b, c = a_tuple
>> > a
'huang'
>> > b
'jian'
>> > c
'ming'
2.1.3 字典(dict)
与列表类似,但其中元素的顺序无关紧要,通过键值对的键(key)访问 键(key)可以是字符串和python中其他任意不可变类型(布尔型、整形、浮点型、元组、字符串等) 创建字典
>> > empty_dict = { }
>> > a_dict = { 'name' : 'hjm' , 'age' : 24 }
>> > lol = [ [ 'name' , 'hjm' ] , [ 'age' , '24' ] ]
>> > dict ( lol)
{ 'name' : 'hjm' , 'age' : '24' }
>> > lot = [ ( 'a' , 'b' ) , ( 'c' , 'd' ) ]
>> > dict ( lot)
{ 'a' : 'b' , 'c' : 'd' }
>> > tol = ( [ 'name' , 'hjm' ] , [ 'age' , '24' ] )
>> > dict ( tol)
{ 'name' : 'hjm' , 'age' : '24' }
>> > los = [ 'ab' , 'cd' , 'ef' ]
>> > dict ( los)
{ 'a' : 'b' , 'c' : 'd' , 'e' : 'f' }
>> > a_dict = { 'name' : 'hjm' }
>> > a_dict[ 'age' ] = '24'
{ 'name' : 'hjm' , 'age' : '24' }
>> > pythons = {
'name1' : 'h1' ,
'name2' : 'h2' ,
'name3' : 'h3'
}
>> > others = {
'age1' : 'm1' ,
'age2' : 'm2'
'name1' : 'm1'
}
>> > pythons. update( others)
>> > pythons
{ 'name1' : 'm1' , 'name2' : 'h2' , 'name3' : 'h3' , 'age1' : 'm1' , 'age2' : 'm2' }
>> > del pythons[ 'age2' ]
{ 'name1' : 'm1' , 'name2' : 'h2' , 'name3' : 'h3' , 'age1' : 'm1' }
dict.clear()清除所有元素 使用 in 判断某个键是否存在一个字典中
>> > 'name' in a_dict
True / False
>> > customers = { 'h' : 12 , 'j' : 23 , 'm' : 45 }
>> > customers. keys( )
dict_keys( [ 'h' , 'j' , 'm' ] )
>> > list ( customers. keys( ) )
[ 'h' , 'j' , 'm' ]
>> > customers. values( )
dict_values( [ 12 , 23 , 45 ] )
>> > customers. items( )
dict_items( [ ( 'h' , 12 ) , ( 'j' , 23 ) , ( 'm' , 45 ) ] )
同样使用=赋值,修改会影响原字典,使用dict.copy()不会影响原字典
2.1.4 集合
>> > empty_set = set ( )
set ( )
>> > a_set = { 0 , 2 , 4 , 6 , 8 }
{ 0 , 4 , 2 , 6 , 8 }
>> > set ( 'letters' )
{ 'l' , 'e' , 't' , 'r' , 's' }
>> > set ( [ 'huang' , 'jian' , 'ming' ] )
{ 'huang' , 'jian' , 'ming' }
>> > set ( ( 'huang' , 'jian' , 'ming' ) )
{ 'huang' , 'jian' , 'ming' }
>> > set ( { 'name' : 'hjm' , 'sex' : 'man' , 'stature' : 174 } )
{ 'name' , 'sex' , 'stature' }
>> > drinks = {
'martini' : { 'vodka' , 'vermouth' } ,
'black russian' : { 'vodka' , 'kahlua' } ,
'white russian' : { 'cream' , 'kahlua' , 'vodka' } ,
'manhattan' : { 'rye' , 'vermouth' , 'bitters' } ,
'screwdriver' : { 'orange juice' , 'vodka' }
}
>> > for name, contents in drinks. items( ) :
if 'vodka' in contents:
print ( name)
screwdriver
martini
black russian
white russian
>> > for name, content in drinks. items( ) :
if 'vodka' in content and not ( 'vermouth' in content or 'cream' in content) :
print ( name)
screwdriver
black russian
常用set集合运算
用&或set1.intersection(set2)获取集合的交集 用|或set1.union(set2)获取集合的并集(至少出现一个集合中的元素) 用-或set1.difference(set2)获取两个集合的差集(出现在第一个集合但不出现在第二个集合)
非常用set集合运算
用^或set1.symmetric_difference(set2)可以获得两个集合的异或集(仅在两个集合中出现一次) 用<=或set1.issubset(set2)可以判断一个集合是否是另一个集合的子集(第一个集合的所有元素都出现在第二集合中) 用>=或issuperset()判断是否是超集 真子集用<或>判断