ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python数据类型

2021-11-26 21:32:40  阅读:166  来源: 互联网

标签:dict1 python list1 str1 数据类型 字符串 print zhangsan


数据类型

概述

  • 数字,字符串,元祖不可变数据类型(更改其值是在内存里开辟新的空间来存放新值,原内存地址里的值不变)
    • 对于不可变数量类型:先进行修改操作再打印,否则会会返回None
  • 列表,字典,集合可变数据类型(在内存地址不变的基础上可以修改值)
  • 字符串,列表,元祖都属于序列都有索引,可以遍历,可以切片,可以拼接
  • python里括号使用总结
    • 小括号(): 用于定义元组; 方法调用; print打印; 函数,如len()
    • 中括号(): 用于定义列表; 字符串,列表,元组取下标; 字典取key
    • 大括号(): 用于定义字典,集合; format格式化输出用于取代%s这种的占位符也是大括号

字符串str

索引与切片

在这里插入图片描述

  • 索引
a = "abcde"
print(a[0])
print(a[1])
print(a[-1])

#执行结果
a
b
e
  • 切片
a = "abcdefghijk"
print(a[0:2])	#取第1个到第2个字符(不包含第3个)
print(a[1:6])	#取第2个到第6个字符(不包含第7个)
print(a[0:-1])	#-1表示倒数第一个(最后一个),取第1个到倒数第2个字符
print(a[0:])	#取全部
print(a[:])		#取全部
#执行结果
ab
bcdef
abcdefghij
abcdefghijk

按步长取
print(a[1:6:2])		#步长为2
print(a[::-1])		#倒序
print(a[::-2])		#倒序,步长为2
#执行结果
bdf
kjihgfedcba
kigeca

shell

[root@server1 ~]# echo ${str:0:2}
ab		#取第1个到第2个字符(不包含第3个)
[root@server1 ~]# echo ${str:1:6}
bcdefg	#取第2个到第6个字符(不包含第7个)

[root@server1 ~]# echo $str|cut -c1-2
ab		#取第1个到第2个字符
[root@server1 ~]# echo $str|cut -c2-7
bcdefg	#取第2个到第6个字符

[root@server1 ~]# echo $str|awk '{print substr($0,1,2)}'
ab		#从第1个开始取,取2个字符
[root@server1 ~]# echo $str|awk '{print substr($0,2,6)}'
bcdefg	#从第2个开始取,取6个字符

[root@server1 ~]# echo $str|sed -r 's/()(..)(.*)/\2/'
ab
[root@server1 ~]# echo $str|sed -r 's/(.)(......)(.*)/\2/'
bcdefg
  • 循环遍历打印字符串
方法1:
for i in range(5):
    print(a[i])

方法2
for i in a:
    print(i)    

打印字符及其索引
for index, i in enumerate(a):
    print(index, i)
  • shell
#!/bin/bash
str1="abcde"
length=`echo $str1|wc -L`
for i in `seq $length`
do
	echo $str1|cut -c$i
done

常见操作

str1 = "Hello, nice to meet you!"

print(len(str1))			# 调用len()函数来算长度
print(str1.__len__())		# 使用字符串的__len__()方法来算长度

print(str1.capitalize())	# 整个字符串的首字母大写 
print(str1.title())			# 每个单词的首字母大写 
print(str1.upper())			# 全大写 
print(str1.lower())			# 全小写 
print(str1.swapcase())		# 字符串里所有字母大小写互换

print(str1.center(50, '*'))	# 一共50个字符,字符串放中间,不够的两边补*
print(str1.ljust(50, '*'))	# 一共50个字符,不够的字符串右边补*
print(str1.rjust(50, '*'))	# 一共50个字符,不够的字符串左边补*

print(str1.strip())			# 删除字符串左边和右边的空格及换行(常用) 
print(str1.lstrip())		# 删除字符串左边的空格及换行 
print(str1.rstrip())		# 删除字符串右边的空格及换行 

print(str1.endswith('you'))	# 判断字符串是否以you结尾
print(str1.startswith('H'))	# 判断字符串是否以H开始 

print(str1.count('l'))		# 统计字符串里l出现了多少次 

print(str1.find('nice'))	# 找出nice在字符串的第1个下标,否则返回-1 
print(str1.rfind('e'))		# 找出最后一个e在字符串的下标,否则返回-1 
print(str1.index('nice'))	# 与find类似,但找不到会报错
print(str1.rindex('e'))		# 与rfind类似,但找不到会报错

print(isinstance(str1, int))# 判断str1的数据类型是否为int型

print(str1.isalnum())		# 判断字符串是否由字母或数字组成
print(str1.isalpha())		# 判断字符串是否由纯字母组成
print(str1.isdigit())		# 判断字符串是否由纯数字组成
print(str1.islower())		# 判断字符串是否由纯小写字母组成
print(str1.isupper())		# 判断字符串是否由纯大写字母组成
print(str1.isspace())		# 判断字符串是否由纯空格组成

print(str1.replace('l', '*', 2)) # 替换字符串中的l为*,最多替换2个
  • 字符串分割(分割成列表
以空格为分隔符
str1 = "Hello, nice to meet you!"
print(str1.split(' '))
print(str1.split(' ')[1])
#执行结果
['Hello,', 'nice', 'to', 'meet', 'you!']
nice

以:为分隔符
str2 = 'tcpdump:x:72:72::/:/sbin/nologin'
print(str2.split(':'))
#执行结果
['tcpdump', 'x', '72', '72', '', '/', '/sbin/nologin']

以换行符\n为分隔符
str3 = '''hi
girls
!'''
print(str3.splitlines())
print(str3.splitlines()[0:2])
#执行结果
['hi', 'girls', '!']
['hi', 'girls']

列表list

list1 = [1, 2, 'a', 'b', '中文']
print(list1)
print(type(list1))
print(len(list1))
print(list1[0])
print(list1[0:3])
for index, value in enumerate(list1):
    print(index, value)

#执行结果
[1, 2, 'a', 'b', '中文']
<class 'list'>
5
1
[1, 2, 'a']
0 1
1 2
2 a
3 b
4 中文
按照索引增
list1.insert(1, "add")

追加(增加到最后)
list1.append("end")

迭代的增
list1.extend([5, 6, 'c'])

#执行结果
[1, 'add', 2, 'a', 'b', '中文']
[1, 'add', 2, 'a', 'b', '中文', 'end']
[1, 'add', 2, 'a', 'b', '中文', 'end', 5, 6, 'c']
按索引删(有返回值)
list1.pop(1)
print(list1)

按索引删(可切片,无返回值;不加索引,会删除整个列表)
del list1[1:3]
print(list1)

按元素删
list1.remove('c')
print(list1)

清空
list1.clear()
print(list1)

#执行结果
[1, 2, 'a', 'b', '中文', 'end', 5, 6, 'c']
[1, 'b', '中文', 'end', 5, 6, 'c']
[1, 'b', '中文', 'end', 5, 6]
[]
list1 = [1, 2, 'a', 'b', '中文']

反转列表
list1.reverse()
print(list1)

按索引修改
list1[0]='**'
print(list1)

#执行结果
['中文', 'b', 'a', 2, 1]
['**', 'b', 'a', 2, 1]
  • 其他
list1 = [1, 2, 'a', 'b', '中文']

统计元素在列表中出现的次数
print(list1.count('a'))

找出(第一个匹配)元素的索引
print(list1.index('b'))

#执行结果
1
3

元祖tuple

  • 相当于只读列表
tuple1 = ("lisi", "zhangsan", "wanger", "mazi")
print(tuple1)
print(type(tuple1))
print(tuple1[2])

#执行结果
('lisi', 'zhangsan', 'wanger', 'mazi')
<class 'tuple'>
wanger
  • 案例
tuple2 = (["lisi", 1880], ["zhangsan", 2880], ["wanger", 2000], ["mazi", 2400])
print(tuple2[0][0])
print(tuple2[1][0:])

元祖不能修改,但元祖内嵌套的列表可以修改
tuple2[0][0] = "****"
print(tuple2)

#执行结果
lisi
['zhangsan', 2880]
(['****', 1880], ['zhangsan', 2880], ['wanger', 2000], ['mazi', 2400])

字典dict

  • 字典是python中唯⼀的映射类型,采⽤键值对(key-value)的形式存储数据。key唯一,value可以相同

  • python 对key进⾏哈希函数运算,根据计算的结果决定value的存储地址,所以字典是⽆序存储的,且key必须是可哈希的。可哈希表示key必须是不可变类型,如:数字、字符串、元组。

dict1 = {
    "name": "zhangsan",
    "age": 18,
    "sex": "男",
    "hobby": "play"
}
print(dict1)
print(type(dict1))
print(len(dict1))

通过key查value
print(dict1['age'])

#执行结果
{'name': 'zhangsan', 'age': 18, 'sex': '男', 'hobby': 'play'}
<class 'dict'>
4
18
dict1["id"] = 3180906023
print(dict1)

#执行结果
{'name': 'zhangsan', 'age': 18, 'sex': '男', 'hobby': 'play', 'id': 3180906023}
dict1.pop('id')
print(dict1)

清空
dict1.clear()
print(dict1)

#执行结果
{'name': 'zhangsan', 'age': 18, 'sex': '男', 'hobby': 'play'}
{}
dict1 = {
    "name": "zhangsan",
    "age": 18,
    "sex": "男",
    "hobby": "play"
}

dict1['hobby'] = 'ball'
print(dict1)

#执行结果
{'name': 'zhangsan', 'age': 18, 'sex': '男', 'hobby': 'ball'}
  • 其他
循环遍历键
for i in dict1.keys():
    print(i)
    
循环遍历值
for i in dict1.values():
    print(i)
    
循环遍历键值对
for i in dict1.items():
    print(i)
    
#执行结果
name
age
sex
hobby

zhangsan
18
男
play

('name', 'zhangsan')
('age', 18)
('sex', '男')
('hobby', 'play')
  • 案例
city={
    "北京": {
        "东城": "景点",
        "朝阳": "娱乐",
        "海淀": "大学", 
    },
    "深圳": {
        "罗湖": "老城区",
        "南山": "IT男聚集",
        "福田": "华强北",
    },
    "上海": {
        "黄埔": "xxxx",
        "徐汇": "xxxx",
        "静安": "xxxx",
    },
}
打印北京东城区的说明(也就是打印出"景点")
print(city['北京']['东城'])

修改北京东城区的说明,改为"故宫"
city['北京']['东城'] = '故宫'
print(city['北京']['东城'])

增加北京昌平区及其说明
city['北京']['昌平'] = '说明'
print(city['北京'])

修改北京海淀区的说明,将"大学"改为"清华","北大","北邮"三个学校的列表
city['北京']['海淀'] = ['清华', '北大', '北邮']
print(city['北京']['海淀'])

在大学列表里再加一个"北影"
city['北京']['海淀'].append('北影')
print(city['北京']['海淀'])

循环打印出北京的区名,并在前面显示序号(以1开始)
for index, i in enumerate(city['北京'].keys()):
    print(index, i)
    
循环打印出北京海淀区的大学,并在前面显示序号(以1开始)
for index, i in enumerate(city['北京']['海淀']):
    print(index, i)

集合set

  • 集合是⽆序的,不重复的数据集合,它⾥⾯的元素是可哈希的(不可变类型),但是集合本身是不可哈希的。

  • 集合最重要的两点:

    • 去重,把⼀个列表变成集合,就⾃动去重了
    • 关系测试,测试两组数据之前的交集、差集、并集等关系
  • 创建

set1 = {"zhangsan", "lisi", "wanger", "mazi"}
set2 = [1, 2, 2, 3, 3, 3]
print(set1)
print(set(set2))

#执行结果
{'mazi', 'zhangsan', 'lisi', 'wanger'}
{1, 2, 3}
  • 交并补
set1 = {1, 3, 5, 7, 9}
set2 = {2, 3, 5, 8, 10}

交集
print(set1.intersection(set2))

并集
print(set1.union(set2))

补集
print(set1.difference(set2))
print(set2.difference(set1))

#执行结果
{3, 5}
{1, 2, 3, 5, 7, 8, 9, 10}
{1, 9, 7}
{8, 2, 10}
set1 = {"zhangsan", "lisi", "wanger", "mazi"}
set1.add("xiaoming")
print(set1)

#执行结果
{'wanger', 'mazi', 'lisi', 'zhangsan', 'xiaoming'}
set1 = {"zhangsan", "lisi", "wanger", "mazi"}
set1.remove("mazi")

#执行结果
{'lisi', 'zhangsan', 'wanger'}

标签:dict1,python,list1,str1,数据类型,字符串,print,zhangsan
来源: https://blog.csdn.net/gxy_learning/article/details/121569042

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有