Python | 练习字符串居多
程序员文章站
2022-04-06 15:32:06
...
黑色底色为运行代码,白色底色为输出结果
#题1:统计在一个队列中的数字,有多少个正数,多少个负数,如[1, 3, 5, 7, 0, -1, -9, -4, -5, 8]
#思路:for把列表中每一个数取出来,>0正数,<0负数,=0既不是正数也不是负数;计数
list = [1, 3, 5, 7, 0, -1, -9, -4, -5, 8]
n, m = 0, 0
for value in list:
if value > 0:
n = n + 1
elif value < 0:
m = m + 1
else:
print("%s 既不是正数也不是负数" % value)
print("正数个数是:%d,负数个数是:%d" % (n, m))
0 既不是正数也不是负数
正数个数是:5,负数个数是:4
#思路2:把list里的所有正数组成一个数列,所有负数组成一个数列,输出数列长度
a = [1, 3, 5, 7, 0, -1, -9, -4, -5, 8]
b = [i for i in a if i > 0]
c = [i for i in a if i < 0]
print("正数个数是:%d,负数个数是:%d" % (len(b),len(c)))
正数个数是:5,负数个数是:4
a = [1, 3, 5, 7, 0, -1, -9, -4, -5, 8]
# 用列表生成式,生成新的列表
b = [i for i in a if i > 0]
print("大于0的个数:%s" % len(b))
c = [i for i in a if i < 0]
print("小于0的个数:%s" % len(c))
大于0的个数:5
小于0的个数:4
#熟悉列表生成式
#列表生成式:把要生成的元素写在前边,后边跟for循环来快速生成列表 list_new = [s for s in range(1,12)]
list_new = [s for s in range(1,12)]
list_new
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
#可以搞两个for,即两层循环,生成全排列
list_new1 = [s+v for s in range(1,12) for v in range(2,4)]
list_new1
[3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14]
#同上,再举一个例子
a = [i+j for i in 'abc' for j in 'xyz']
a
[‘ax’, ‘ay’, ‘az’, ‘bx’, ‘by’, ‘bz’, ‘cx’, ‘cy’, ‘cz’]
#for循环后可以加上判断
a = [i for i in range(-9,10) if i > 0]
b = [i for i in range(-9,10) if i < 0]
a,b
([1, 2, 3, 4, 5, 6, 7, 8, 9], [-9, -8, -7, -6, -5, -4, -3, -2, -1])
#题2:字符串 "axbyczdj",如果得到结果“abcd”
#思路1: 切片
a = "axbyczdj"
b = a[::2]
b
‘abcd’
#思路2:观察发现,字符串的偶数位被取出来作为新的字符串;那首先怎么取偶数位,能整除2的;其次把数取出来了放到哪里,新建一个列表,放列表里;
#怎么放到列表里,列表更新字段可以用.append();
#我们需要的结果是字符串,不是列表,把列表转成字符串,可以用空串将列表中的字符连接成新的字符串 ''.join()
a = 'axbyczdj'
b = []
for i in range(len(a)):
if i % 2 == 0:
b.append(a[i])
b = ''.join(b)
b
‘abcd’
#python中,字符串是不可变类型,即不能直接修改;想要改的话,需要建一个新的字符串
#常见的修改方式:将字符串改成列表后,修改,再用join组成新字符串
a = "axbyczdj"
c = []
for i in range(len(a)):
if i % 2 == 0:
c.append(a[i])
print("".join(c))#用空字符串和列表中字符组合成新的字符串
d = str(c)#列表转换成字符串
e = tuple(c) #列表转换成元组
d,e
abcd
("[‘a’, ‘b’, ‘c’, ‘d’]", (‘a’, ‘b’, ‘c’, ‘d’))
a = 'assd'
a[1]
‘s’
str_test = "{'a': 1, 'b': 2}"
dict_test = eval(str_test) #字符串转字典
print (dict_test)
{‘a’: 1, ‘b’: 2}
ll = "'a','b','c','d','e'"
dic_ll = eval(ll)
print(dic_ll)
(‘a’, ‘b’, ‘c’, ‘d’, ‘e’)
#两个列表转换成字典,用for循环
list1 = ['a', 'b', 'c']
list2= [1,2,3]
d = {}
for i in range(len(list1)):
d[list1[i]] = list2[i]
d
{‘a’: 1, ‘b’: 2, ‘c’: 3}
#两个列表转换成字典,用zip
list1 = ['a', 'b', 'c']
list2= [1,2,3]
d = dict(zip(list1, list2))
d
{‘a’: 1, ‘b’: 2, ‘c’: 3}
#题3:已知一个字符串为“hello_world_yoyo”, 如何得到一个队列 ["hello","world","yoyo"]
#思路:用split
a = 'hello_world_yoyo'
b = a.split("_")
b
[‘hello’, ‘world’, ‘yoyo’]
#题4:已知一个数字为1,如何输出“0001”
#思路:%04d
a = 1
print ("a = %04d" % a)
a = 0001
#题5:已知一个队列,如: [1, 3, 5, 7], 如何把第一个数字,放到第三个位置,得到:[3, 5, 1, 7]
#思路:用insert把第一个数放到第三个;切片从1开始
a = [1, 3, 5, 7]
a.insert(3, a[0]) #第一个参数是插入位置,第二个参数是即将插入的数
#insert是向a里边插入数据,不用搞个新列表b什么的
print(a[1:]) #切片括号里是:
[3, 5, 1, 7]
a = [1, 3, 5, 7]
# insert插入数据
a.insert(3, a[0])
print(a[1:])
[3, 5, 1, 7]
#题6:已知 a = 9, b = 8,如何交换a和b的值,得到a的值为8,b的值为9
#思路1:
a = 9
b = 8
a, b = b, a
a,b
(8, 9)
#思路2:用中间变量
a = 9
b = 8
c = a
a = b
b = c
a,b
(8, 9)