【python】基础——字符串、列表、元组、字典、函数

45 阅读7分钟

输入输出函数

输入

input输入类型为string

name = input('名字:')	 #input输入类型为string
num= int(input("请输入一个整数"))

输出

print(name)
print(f"你好,{name}")
名字:圈圈
圈圈
你好,圈圈

格式化输出

import math
r = input("请输入圆的半径")
f_r = float(r)
c = 2*math.pi*f_r
s = math.pi*f_r**2
print(f"圆的周长为:{c:.2f}")
print(f"圆的面积为:{s:.2f}")
请输入圆的半径3
圆的周长为:18.85
圆的面积为:28.27

if else elif格式

  • 可以出现if 1 < a < 3的格式
a = input("请输入正还是反:")
if a == "正":
	print("你选择正!")
elif a == "反":
	print("你选择反!")
else:
	print("输入错误!")

注释

# 单行注释   快捷键:ctrl+/

def f(n):
"""函数说明"""
'''函数说明'''

关键字

Ture、False、None、if、elif、else

a = None
if a is None:  # 更为习惯
	print('a为空')

运算符

整除符号://

print(5/2)	# 2.5
print(5//2)	 # 2 

幂运算:**

print(3**2)	 # 9
print(2**3)	 # 8

位运算:左移<<、右移>>、按位与&、按位或|、按位异或^、按位取反~

print(4<<1)  # 8:4的二进制为100向左移1位
print(4>>1)  # 2:4的二进制为100向右移1位
print(~1)	# -2

身份运算符:is、is not

a=1
print(id(a))
b=1
print(id(b))
print(a is b)
print(a is not b)
1672454275312
1672454275312
True
False

成员运算符:in、not in

x = 1
y = [1,2,3]
print(x in y)	# True
print(x not in y)	# False

逻辑运算符:否not、与and、或or

a = True
!a	# 'a' 不是内部或外部命令,也不是可运行的程序或批处理文件。
not a  # False

运算符优先级

  1. 算术运算符
  2. 位运算
  3. 比较运算
  4. 布尔运算
  5. 赋值运算

字符与字符串

转义字符

\n:换行

\t:tab

\u:unicode编码 爬虫常见

print('\u5706\u5706')	# 圆圆

题目:输入人名返回unicode编码

name = input("请输入名字:")
s = ''
for n in name:
    s += r"\u" + hex(ord(n))[2:]	
    # r:raw string原生字符串
    # hex:16进制数
    # ord:返回一个字符的10进制Unicode码,必须是一个字符
print(f"{name}的unicode编码为:{s}")		
	# formatted String格式化字符串
请输入名字:圆圆
圆圆的unicode编码为:\u5706\u5706

字符串

常见问题:

1.字符串里含有单引号或者双引号怎么办?

print("I'm a student.")
print('哈哈”哈')

2.多行字符串怎么办?

print("""1
2
3""")

函数

s = "姜撞奶好好喝"

# 1.求字符串长度
len(s)  # 6


# 2.分割字符串
sub1_s = s[:3]
sub2_s = s[-3:]
print(sub1_s)  # 姜撞奶
print(sub2_s)  # 好好喝

# 3.字符串去空格
s1 = "   " + s + "       " 
print(s1)
s1.strip()

# 4.判断字符串是否开头
s.startswith("姜撞奶")

# 5.串联多串
s2 = s + "yes"
print(s2)
s3 = "yes"
str= '!'.join([s,s3])
print(str)

# 6.以某字符分割字符串
str.split("!")	 # ['姜撞奶好好喝', 'yes']

# 7.替换子串
str.replace("!","。")	# 姜撞奶好好喝。yes

大小写

name = "yuan quan"
print(name.lower())	 # yuan quan
print(name.upper())	 # YUAN QUAN
print(name.title())  # Yuan Quan
print(name.capitalize())  # Yuan quan
print(name.swapcase())  # YUAN QUAN

列表

特点

1.元素类型可以不同

2.在内存中紧邻存储

创建

# 1.[]
a = []
b = [3,"我",3.34]

# 2.list()
c = list((3,1,2))	# (3,1,2)为元组类型
print(c)

# 3.range() 创建一个序列
d = list(range(10))		# 不包括10
print(d)		#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

#创建副本
b = [3,"我",3.34]
print(id(b))
e = b[:]
print(id(e))
print(e)
"""2866847250176
2866847173888
[3, '我', 3.34]"""

访问

列表a
正索引012345
负索引-6-5-4-3-2-1
a = "姜撞奶好好喝"

# 1.单个元素访问
# 1.1正向访问
a[0]
# 1.2负向访问
a[-4]
# 2.切片访问[开始:结束:步长]	[ )包前不包后
a[:3]		# 不包括3:姜撞奶
a[-4:]		# 包括-4:奶好好喝
a[::2]

增加元素

  • append
  • insert
  • extend
a = [1,'wo',3,4]

# a.append()
a.append(0)
print(a)

# a.insert()
a.insert(1,'cha')  # insert(位置,插入元素)
print(a)

# a.extend()
a.extend([1,2,3])
print(a)

删除元素

  • pop
  • remove
  • del
a = [1,'wo',3,4,1,2]

# a.pop()
print(a.pop())  # 默认输出最后一位元素
print(a)

print(a.pop(0))  # 输出第一个元素

# a.remove(元素值),只会移除第一个1
a.remove(1)  
print(a)

# del a[索引]
del a[0]  # 根据索引删除元素
print(a)

遍历

  • range
  • in
a = [1,'wo',3,4,1,2]

# range
a_len = len(a)
for i in range(a_len):
    print(a[i],end = ",")	# end默认为"\n"
print("\n")

# in
for i in a:
    print(i,end = ";")

列表生成式

  • b = [i*2 for i in a]
  • b = [i*2 for i in a if i%2 == 0]
a = [1,'wo',3,4,1,2]
b = [i*2 for i in a]
print(b)	# [2, 'wowo', 6, 8, 2, 4]

c = [1,3,4,6,7,8,9,10]
d = [i*2 for i in c if i%2 == 0]  #与if结构结合
print(d)	# [8, 12, 16, 20]

思考题:输入列表a,返回所有偶数

a = input("请输入一个列表:")
a = eval(a)		# eval():将输入的字符串转为对应的数据类型
print(a)

b = [i for i in a if i%2 == 0]
print(b)

b = []
for e in a:
    if e%2 == 0:
        b.append(e)
print(b)
请输入一个列表:[1,2,3,4,5,6,7,8]
[1, 2, 3, 4, 5, 6, 7, 8]
[2, 4, 6, 8]
[2, 4, 6, 8]

排序

  • 直接对表进行操作

    • a.sort()
    • a.sort(reverse=Ture) :降序
    • a.reverse()
  • 生成新的列表

    • sort(a)
    • sort(a,reverse=Ture)
list1 = [1,4,2,5,4]

list1.reverse()               #翻转
print(list1)
 
list1.sort()
print(list1)            #升序排列,直接对表进行操作
 
list1.sort(reverse=True)
print(list1)            #降序排列
 
list2 = [1,4,2,5,4]
print(sorted(list2))        #升序排列,生成一个新表
 
print(sorted(list2,reverse=True)) #降序排列,从之前的列表中挑选出元素组成新的表

list3 = ["fddg","gfdggfg","f"]  #按照长度进行排序,生成新的列表
print(sorted(list3,key=len))

元组

特点

  • 创建好后,不可以增加元素
  • 创建好后,不可以删除元素

创建

a = ()
a = tuple()
a = tuple([1,"w",2,3,"我"])

访问

a = (1,"w",2,3,"我")

a[0]	# 1
type(a[0])	# int

a[:2]	# (1,"w")

方法

  • a.count():判断元素在元组中出现了几次
  • a.index():判断元素在元组中的索引值
a = (1,"w",2,3,"我")

a.count("我")

a.index("我")

字典

特点

  • 无序,不可以下标索引
  • 键唯一

创建

  • d = {}

    d[健]=值

  • d = dict(健=值,健=值)

  • d = dict([(健,值),(健,值)])

d1 = {}
d1['a'] = 1
d1['b'] = 2
print(d1)  # {'a': 1, 'b': 2}

d2 = dict(a=1,b=2)
# 错误写法:d2 = dict('a'=1,'b'=2)  
print(d2)  # {'a': 1, 'b': 2}

d3 = dict([('a',1),('b',2)])
print(d3)

访问

  • 健:d.keys()

  • 值:d.values()

  • 键值对:d.items()

  • 遍历:

    • for k in d:

      ​ print(k,d[k])

    • for k,v in d.items():

      ​ print(k,v)

  • 访问某个不存在健,放回默认值:d.get(健,默认值)

d = {'a':1,'b':2,'c':3}

# 健
d.keys()  # dict_keys(['a', 'b', 'c'])
list(d.keys())  # ['a', 'b', 'c']

# 值
d.values()  # dict_values([1, 2, 3])
list(d.values())  # [1, 2, 3]

# 键值对
d.items()  # dict_items([('a', 1), ('b', 2), ('c', 3)])
list(d.items())  # [('a', 1), ('b', 2), ('c', 3)]

# 遍历1
for k in d:
    print(k,d[k])
    
# 遍历2
for k,v in d.items():
	print(k,v)
'''输出结果:
a 1
b 2
c 3
'''

# 访问不存在的健
d.get('d',0)	# 0

修改

  • d[健] = 值
  • d.update({健:值,健:值})
d = {'a':1,'b':2,'c':3}

# d[健] = 值
d['a'] = 4
print(d)  # {'a': 4, 'b': 2, 'c': 3}

# d.update({健:值,健:值})
d.update({'b':5,'c':6,'d':7})
print(d)  # {'a': 4, 'b': 5, 'c': 6, 'd': 7}

删除

  • d.pop(健) 返回:值
  • del d[健] 返回:无
d = {'a':1,'b':2,'c':3}

# d.pop(健)
d1 = d.pop('a')
print(d1)	# 1
print(d)	# {'b': 2, 'c': 3}

# del d[健]
del d['b']
print(d)	# {'c': 3}

# 删除多个键值对
d = {'a':1,'b':2,'c':3}
del_keys = ['a','b']
for k in del_keys:
    del d[k]
print(d)	# {'c': 3}

集合

特点

  • 无序,不可以下标索引
  • 不重复,可用于去重

创建

a = set()

b = {3,1,2}

增删

a = {3,2,1}

a.add(4)

a.pop()  

a.remove(1)

set间的操作

a = {1,2,3,4,5,6,7}
b = {5,6,7,8,9,10}

# a|b:a、b总和
print(a|b)

# a&b:a、b共有
print(a&b)

# a-b:a有、b没有
print(a-b)

# a.issubset(b):a是否是b子串
{1,2}.issubset(a)
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
{5, 6, 7}
{1, 2, 3, 4}

函数

自定义函数

  • 调用时,位置参数要放前面
  • 调用时,*号后面为关键字参数
  • 定义时,默认参数位于位置参数后
# 有参无返回值
def print_range_of(start,end):
    for i in range(start,end+1):
        print(i,end=' ')

print_range_of(1,10)

# 任意多参数:*或**
def sum_of(*para):
    start,end = para
sum_of(1,10)

def sum_of(**para):
    start = para['start']
    end = para['end']
sum_of(start=1,end=10)		# 关键字调用

# *号后面关键字参数
def student(name,*,add):
	print(f"姓名:{name},地址:{add}")
student("圆圆",add="湖南")

常用函数

eval():将输入的字符串转为对应的数据类型

split(’ '):字符串以‘ ’进行分隔为列表

a = '1 2 3'
print(a.split(" "))
print(type(a.split(" ")))
['1', '2', '3']
<class 'list'>

range(1,10)

print(list(range(1,10)))	# [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(range(1,10))	# range(1, 10)

lambda

def max_len(*lists):
	return max(*lists,key=lambda v:len(v))

max_len([3,2,1],[2],[1,2,3,4,5])
	
# lambda v:len(v)等价于
def f(v):
	return len(v)