Python | 练习字符串居多

黑色底色为运行代码,白色底色为输出结果

#题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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值