python基本数据类型

1.数值

a,b,c,d=100,22.28,True,3+1j

print(type(a))  # <class 'int'>
print(type(b))  # <class 'float'>
print(type(c))  # <class 'bool'>
print(type(d))  # <class 'complex'>

print(isinstance(a,int)) # True
print(isinstance(b,complex)) # False

print(abs(y))  # 取绝对值

print(divmod(x,y)) # 生成元组(取除,取余)

2.字符串

  1) 创建字符串

str = 'Hello world'
str1 = "hello python"
print(type(str),type(str1)) # <class 'str'> <class 'str'>

  2)访问字符串

str = 'Hello world'

print(str[0]) # H
print(str[0:])  # Hello world
print(str[1:7]) # ello w
print(str[1:-1]) # ello worl

  3)字符串更新

str = 'Hello world'
print(str + ' over') # Hello world over

  4) 字符串运算符

a = 'Hello'
b = 'world'

print(a+b)  # Helloworld
print(a*2)  # HelloHello

if 'H' in a:
    print('H在a中')  # H在a中

if 'h' not in a :
    print('h不在a中')  # h不在a中

  5)字符串格式化

print('我叫%s,今年%d岁,身高%.2f米' %('小明',10,1.250)) # 我叫小明,今年10岁,身高1.25米

# 三引号
para_str = """这是一个多行字符串的实例
多行字符串可以使用制表符
TAB [\t] 。
也可以使用换行符 [\n]。
"""
print (para_str)

  6)字符串中的相关函数(大多数可以用正则实现)

str = '#slitobo'

print(len(str)) # 字符串的长度

print(str.capitalize()) #首字母大写

print(str.find('y')) # 存在返回0,不存在返回-1

print(str.replace(str,'TTT')) # 替换

print(str.startswith('#')) # 以“#”开头的 True

print(str.endswith('o')) # 以“o” 结束 True
# 将元素以指定字符生成一个新的字符串
s1 = "-"
s2 = ""
seq = ("r", "u", "n", "o", "o", "b") # 字符串序列
print (s1.join( seq ))
print (s2.join( seq ))

# 分割生成列表
>>> 'slito,26,hz,182'.split(',')
['slito', '26', 'hz', '182']

# format格式化
>>> '我的名字是:{0},我的年龄是:{1}'.format('slito',1)
'我的名字是:slito,我的年龄是:1'
>>> '我的名字是:{0},我的年龄是:{1}'.format('slito',100)
'我的名字是:slito,我的年龄是:100'
>>> '我的名字是:{0},我的年龄是:{1:d}'.format('slito',100)
'我的名字是:slito,我的年龄是:100' 
>>> '我的名字是:{0},我的年龄是:{1:5d}'.format('slito',100)
'我的名字是:slito,我的年龄是: 100'
>>> '我的名字是:{0},我的年龄是:{1:05d}'.format('slito',100)
'我的名字是:slito,我的年龄是:00100'
>>> '我的名字是:{0},我的年龄是:{1:<5d}'.format('slito',100)
'我的名字是:slito,我的年龄是:100 '
>>> '我的名字是:{0},我的年龄是:{1:>5d}'.format('slito',100)
'我的名字是:slito,我的年龄是: 100'
>>> '我的名字是:{0},我的年龄是:{1:^5d}'.format('slito',100)
'我的名字是:slito,我的年龄是: 100 '
>>>'{name:s}说:卧室{name:s},我的身高是{heigt:.2f}'.format(name='kk',heigt=1.68)
'kk说:卧室kk,我的身高是1.68'

3.列表

  以[ ]标示,内部元素以逗号区分,操作方式与string一致,且可以更改元素内容

  1)创建列表

list1 = ['Google', 'Runoob', 1997, 2000]
list2 = [1, 2, 3, 4, 5 ]

print (list1[0])    # Google
print (list2[1:5])  # [2, 3, 4, 5]

  2)更新列表(改,删,增)

list = ['Google', 'Runoob', 1997, 2000]

# 改变元素
list[1] = 'baidu'
print(list) # ['Google', 'baidu', 1997, 2000]

# 删除元素
del list[1]
print(list) # ['Google', 1997, 2000]

# 增加元素
list.append('newadd') 
print(list) # ['Google', 1997, 2000, 'newadd']

  3)列表的方法

# 查找列表对象索引 list.index(obj,[start,[stop]]),默认从0开始
a=['test','bobo','slito']
b=a.index('bobo')
print("bobo的位置是:",b)   #bobo的位置是: 1

# 将对象插入列表 list.insert(index,obj)
a=['test','bobo','slito']
a.insert(3,'new')
print(a)  # ['test', 'bobo', 'slito', 'new']

# 依靠索引移除列表元素list.pop([index=-1]),默认是-1,即最后一个元素
a=['test','bobo','slito']
a.pop()
print(a) # ['test', 'bobo']
a.pop()
print(a) # ['test']

# 移除列表中的一个元素(默认第一个元素),并且返回该元素的值 list.remove(obj)
a=['test','bobo','slito']
a.remove('test')
print(a) # ['bobo', 'slito']

# 反向列表中元素 list.reverse()
a=['test','bobo','slito']
a.reverse()
print(a) # ['slito', 'bobo', 'test']

# 清空列表 list.clear()
a=['test','bobo','slito']
a.clear()
print(a) # []

# 列表排序 list.sort()
# list.sort(cmp=None, key=None, reverse=False) reverse=False升序True降序
a=[3,1,2]
a.sort()
print(a) # [1, 2, 3]
a.sort(reverse=True)
print(a) # [3, 2, 1]

#统计列表中项目存在的个数list.count()

   >>> list1 = [1,2,2,5,5,8,5]
   >>> list1.count(2)
   2
   >>> list1.count(5)
   3
   >>> list1.count('xxx')
   0

# 复制
list1 = [1,2,3,4]
# 引用复制,共用同一内存中的数据
list2 = list1
list1[0] = 9
print(list1) # [9, 2, 3, 4]
print(list2) # [9, 2, 3, 4]

# 复制,两份独立的内存空间
list3 = list1.copy()
list1[0] = 8
print(list1) # [8, 2, 3, 4]
print(list3) # [9, 2, 3, 4]

列表生成式 

>>> [i ** 2 for i in range(1,10) if i % 2 == 0]
[4, 16, 36, 64]

4.元组

  元组与列表使用方法一样,以()标示,内部以逗号区分,但是不能修改元组内的值。

a = (1,2,3,4)
print(type(a)) # <class 'tuple'>

5.集合

  无序不重复的序列。用于成员关系测试,删除重复元素。两种设置方法,

# 第一种以{}标示,逗号隔离元素
student = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'}
print(student)  # {'Jack', 'Jim', 'Mary', 'Tom', 'Rose'}

# 第二种是以set(value),创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
a = set('abracadabra')
b = set('alacazam')
print(a)    # {'r', 'a', 'c', 'b', 'd'}
print(b)    # {'m', 'a', 'c', 'l', 'z'}
print(a-b)  #差集  {'d', 'b', 'r'}
print(a|b)  #并集 {'m', 'r', 'a', 'c', 'b', 'd', 'l', 'z'}
print(a&b)  #交集 {'a', 'c'}
print(a^b)  #a,b中不同时存在的元素 {'d', 'l', 'r', 'm', 'z', 'b'}

  集合中的对象是要可hash的不可变的类型,list和dict都是不可hash的类型

a=[1,[1,3],'test']
s=set(a)   #TypeError: unhashable type: 'list'
a=[1,{1:3},'test']
s=set(a)   #TypeError: unhashable type: 'dict'

  集合中的对象是无须排列的,可以使用“in”判断对象是否存在于集合中

a=[1,3,'test']
s=set(a)

print(s,type(s)) # {'test', 1, 3} <class 'set'>
print(1 in s)  # True
print(2 in s)  # False

  add用于添加一个元素,update 用于添加多个(可以使用list等)

a=set('test1t')
print(a)    # {'s', 't', 'e', '1'}
a.add('u')
print(a)    # {'t', '1', 'e', 's', 'u'}
a.update('ops1')
print(a)    # {'o', 't', 'p', '1', 'e', 's', 'u'}
a.update([12,'ops2'])
print(a)    # {'t', 's', 'o', 12, 'u', 'e', 'ops2', '1', 'p'}

6.字典

   字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中。

  键必须是唯一的,但值则不必。

  值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。

dict1 = {'name':'slitobo','age':'10'}
print(type(dict1))  # <class 'dict'>
print(dict1)    # {'name': 'slitobo', 'age': '10'}

  1) 字典的增,删,改,查和列表的一样,只不过是加上key

dict1 = {'name':'slitobo','age':'10'}

# 查看
print(dict1['name'])

# 增加
dict1['gender']='female'
print(dict1['gender']) # female

# 修改
dict1['gender']='male'
print(dict1['gender']) # male

# 删除
del dict1['gender']
print(dict1)    # {'name': 'slitobo', 'age': '10'}

# 删除整个字典
del dict1
print(dict1)    # NameError: name 'dict1' is not defined

  2) 字典相关的方法

dict1 = {'name':'slitobo','age':'10'}

# 字典的长度
print(len(dict1)) # 2

# dict.clear()清空字典内所有的元素
dict1.clear()
print(dict1) # {} 空字典

# dict.fromkeys()
# 创建一个新字典fromkeys(seq [,value])
# seq 是一个字典键表()
# value是值
seq = ['name','age']
value = 10
dict = dict.fromkeys(seq)
print(dict) # {'name': None, 'age': None}
dict = dict.fromkeys(seq,value)
print(dict) # {'name': 10, 'age': 10}

# key in dict
print('name' in dict)   # True

# dict.items()
# 返回可遍历的元组(键,值)
dict = {'Name': 'Runoob', 'Age': 7}
print(dict.items()) # dict_items([('Name', 'Runoob'), ('Age', 7)])

for i,j in dict.items():
        print(i,":\t",j) ''' Name :     Runoob
                            Age :     7  '''
dict1 = {'name':'slitobo','age':'10'}

# dict.get(key,[value])
# 返回指定键的值,没有键则返回,None
print(dict1.get('name'))    # slitobo
print(dict1.get('gender'))  # None

#dict.setdefault(key,[value])

>>> me
{1: 'abc', 2: 't', 3: 'yt'}
>>> me.setdefault(4)
>>> me
{1: 'abc', 2: 't', 3: 'yt', 4: None}
>>> me.setdefault(5,'test')
'test'
>>> me
{1: 'abc', 2: 't', 3: 'yt', 4: None, 5: 'test'}
>>

# dict.keys()
# 以列表形式返回所有的键
print(dict1.keys()) # dict_keys(['name', 'age'])

# dict.values()
# 以列表形式返回所有的值
print(dict1.values())   # dict_values(['slitobo', '10'])

# dict.update()
# 将一个字典中的值更新到另一个字典中
dict1 = {'name':'slitobo','age':'10'}
dict2 = {'gender':'male','address':'104 Road'}
dict1.update(dict2)
print(dict1) # {'name': 'slitobo', 'age': '10', 'gender': 'male', 'address': '104 Road'}

# dict.pop()
# 返回被删除键的值
dict1 = {'name':'slitobo','age':'10'}
print(dict1.pop('name')) # slitobo

# dict.popitem()
# 返回被删除key-value
site= {'name': '菜鸟教程', 'alexa': 10000, 'url': 'www.runoob.com'}
pop_obj=site.popitem()
print(pop_obj)  # ('url', 'www.runoob.com')
print(site) # {'name': '菜鸟教程', 'alexa': 10000}

字典生成式:        

>>> d1 = {'a':2,'b':3}
>>> { k:v for k,v in d1.items() if v % 2== 0}
{'a': 2}

拷贝

dict1 = {'a': 1, 'b':2, 'c':3}
dict2 = dict1
dict1['a'] = 2
print(dict1) # {'a': 2, 'b':2, 'c':3}
print(dict2) # {'a': 2, 'b':2, 'c':3}

 浅拷贝 

dict1 = {'a': 1, 'b':2, 'c':[1, 2]}
dict2 = dict1.copy()
dict1['a'] = 2
print(dict1) #  变了 {'a': 2, 'b':2, 'c':[1, 2]}
print(dict2) #  没变 {'a': 1, 'b':2, 'c':[1, 2]}
dict1['c'].append(3) 
print(dict1) #  变了{'a': 2, 'b':2, 'c':[1, 2,3]}
print(dict2)  #  变了 {'a': 1, 'b':2, 'c':[1, 2,3]}

    深拷贝

>>> import copy
>>> dict1 = {'a': 1, 'b':2, 'c':[1, 2]}
>>> dict2 = copy.deepcopy(dict1)
>>> dict1['a']=2
>>> dict1['c'].append(3)
>>> dict1
{'a': 2, 'b': 2, 'c': [1, 2, 3]}
>>> dict2
{'a': 1, 'b': 2, 'c': [1, 2]}

 

 7.三目运算符

      b if a else c : 如果a为真,返回b,否则返回c

   a and b or c: 如果a为真,返回b,否则返回c

posted @ 2018-07-16 21:02  slitobo  阅读(281)  评论(0)    收藏  举报