Python字符串及列表

字符串处理


\:转义字符

索引:

 s="dream in python"
 s[0]                                                 ###显示第一个字符
 Out[3]: 'd'

切片:

 s[0:5]                                               ###显示出前5个字符
 Out[6]: 'dream'
 
 s[0:-1]                                              ###显示出0到倒数第二个字字符符                                              
 Out[7]: 'dream in pytho'
 
 s[:]                                                 ###显示出多有字符
 Out[8]: 'dream in python'
 
 s[::-1]                                              ###反转 
 Out[18]: 'nohtyp ni maerd'

判断子串:

 'python' in s                                        ###存在就为真
 Out[9]: True
 
 'python' not in s                                    ###存在为假
 Out[10]: False

重复:

 "*"*10                                               ###打印10个*
 Out[11]: '**********'

连接:

 "*"*10+"dream_ya"+"*"*10                             ###+:连接的作用
 Out[12]: '**********dream_ya**********'

计算长度:

 len(s)                                               ###查看字符串的长度
 Out[13]: 15

变量名合法性判断

规则:
1.变量名由字母,数字或者下划线组成
2.变量名只能以字母或者下划线开头

 while True:
     s = raw_input("请输入一个变量名:")
     if s[0].isalpha() or s[0] == "_":
         for i in s[1:]:
             if i.isalnum() or i == "_":
                     continue
             else:
                     print "不合法!"
                     break
         else:
             print "%s合法"%(s)
     else:
         print "不能以数字开头"

字符串常用操作:


 str="dream"
 str.capitalize()                                    ###将字符串首字母大写,并返回新的首字母大写后的字符串
 Out[15]: 'Dream'
str.center(width[,fillchar]):

返回一个长为width的新字符串,在新字符串中原字符居中,其他部分用fillchar指定的符号填充,未指定时通过空格填充

 str="dream"
 str.center(10,'*')
 Out[19]: '**dream***'
str.count(sub[, start[, end]]) -> int

返回sub在str中出现的次数,如果start与end指定,则返回指定范围内的sub出现次数

 str="hello python"
 str.count("o")
 Out[21]: 2
str.endswith(suffix[, start[, end]])

判断字符串是否以suffix结束

 str="hello python"
 str.endswith("n")
 Out[22]: True
 str.endswith("o")
 Out[23]: False
str.startswith(prefix[, start[, end]])

判断字符串是否以suffix开始

 str="hello python"
 str.startswith("h")
 Out[24]: True
 str.startswith("p")
 Out[25]: False

str.index(sub[,start[,end]])

其和str.find(sub[,start[,end]])一样,只是错误报错不同(返回为-1),判断sub是否在str中,存在返回索引值,如果sub不存在时抛出ValueError异常

 str="hello python"
 str.index("p")
 Out[28]: 6
 str.index("i")
 ValueError: substring not found

str.join(seq)

以str作为分隔符,将序列seq中的所有元素合并为一个新的字符串

 str="hello python"
 print " ".join(str)
 h e l l o   p y t h o n

str.replace(old,new[,count])

将str中的old字符串替换为new字符串,并将替换后的新字符串返回,如果count指定,则只替换前count个字符串

 str="hello python"
 str.replace("python","world")
 Out[43]: 'hello world'

好未来笔试题:输入两个字符串,string1字符串中不能包含string2字符串带的字符

 string1 = raw_input("please input string1:")
 string2 = raw_input("please input string2:")
 for i2 in string2:
     string = string1.replace(i2,"")
     string1 = string
 print string

str.split([sep[,maxsplit]])

以sep字符串作为分割符对str进行切割,默认为空格,maxsplit代表切割的此处

 str="hello python"
 str.split("o")
 Out[49]: ['hell', ' pyth', 'n']

str.strip([chars])

返回一字符串,将str中首尾包含指定的chars字符删除的字符串,未指定时,删除首尾的空格

 str="a b a b a"
 str.strip("a")
 Out[55]: ' b a b '

字母和数字判断(其和shell类似)

 str.isalnum()                                          ###判断是否都是字母或数字
 str.isalpha()                                          ###判断是否都是字母
 str.isdigit()                                          ###判断是否都是数字
 str.islower()                                          ###判断是否都是小写
 str.isspace()                                          ###判断是否都是英文空格
 str.istitle()                                          ###判断是不是都是标题(有大小写且是首字母)
 str.isupper()                                          ###判断是不是都为大写字母

华为机试题:输入字符串,分别统计字母,数字,空格,特殊符号的个数

 s = raw_input("please input string:")
 string, Num, space, Else = 0, 0, 0, 0
 for i in range(0, len(s)):
     if s[i] == " ":
         space += 1
     elif s[i].isdigit():
         Num += 1
     elif s[i].isalpha():
         string += 1
     else:
         Else += 1
 print "字母:%d\n数字:%d\n空格:%d\n其他:%d" % (string, Num, space, Else)
枚举:

方法一:

 a = raw_input("请输入:")
 b = len(a)
 for i in range(0,b):
         print i,a[i]

方法二:

 for i,j in enumerate(hello):
     print i,j

素数 :

 Times = 1
 Prime_Num = input("please input num:")
 if Prime_Num == 2:
     print "The number of primes:1"
     exit()
 elif Prime_Num > 0:
     for i in range(0, Prime_Num):
         if (4 * i + 1) < Prime_Num or (4 * i - 1) < Prime_Num:
             Times += 1
 print "The number of primes:%d" %(Times)

列表


定义一个空列表:

 list = []

定义一个包含元素的列表,元素可以是任意类型,包括数值类型,列表,字符串等均可

 list = ["hello", 4, 'python']

索引:

 list = ["hello", 4, 'python']
 list[0]
 Out[57]: 'hello'

切片:
• 0代表从哪个索引开始切片;
• 3代表切片到哪个位置,并且不包含第三个索引;
• 2代表切片的步长;

 list = ["hello", 4, 'python']
 list[0:3:2]
 Out[58]: ['hello', 'python']

append添加(单个):

 list = ["hello", 4, 'python']
 list.append("dream")
 print list
 ['hello', 4, 'python', 'dream']

extend添加(多个):

 list = ['hello', 4, 'python', 'dream']
 list1 = ["1","2","3"]
 list.extend(list1)
 print list
 ['hello', 4, 'python', 'dream', '1', '2', '3']

insert添加(指定位置):

 list = ['hello', 4, 'python', 'dream']
 list.insert(1,"2")
 print list
 ['hello', '2', 4, 'python', 'dream']

修改元素:

 list = ['hello','python']
 list[1] = "dream"
 print list
 ['hello', 'dream']

index索引查看:

 list = ['hello','python']
 list.index("python")
 Out[76]: 1

count元素出现的此数:

 list = ['12', '1', '13', '1']
 list.count("1")
 Out[79]: 2

删除元素list.remove(list[ ]):

 list = ['12', '1', '13', '1']
 list.remove("1")
 list
 Out[82]: ['12', '13', '1']

删除列表del:

 list = ['12', '1', '13', '1']
 del(list)
 list                                                 ###无结果输出

Test


1.请设计一个高效算法,查找数组中未出现的最小正整数。
给定数组的大小n和整数数组A,请返回数组中未出现的最小正整数。保证数组大小小于等于500。

- 测试样例:

	- 输入:
		4 -1 2 3 4 
	- 输出:  1

脚本:

 s = raw_input("please input Num:")
 s = s.split()
 Num = 1
 if len(s) > 500:
     print "The most of Num is 500!!!"
     exit()
 for i in range(0, len(s)):
     for i1 in s:
         if i1.startswith("-"):
             s.remove(s[s.index(i1)])
             s = s
 if min(s) != "1":
     print "The Min Num:1"
     exit()
 for i3 in range(0,len(s)):
     if str(Num) in s:
         Num += 1
         i3 = 0
 print "The Min Num:%d" % (Num)

2.华为—输入一个字符串,求出该字符串包含的字符集合
- 输入描述:
每组数据输入一个字符串,字符串最大长度为100,且只包含字母,不可能为空串,区分大小写。
- 输出描述:
每组数据一行,按字符串原有的字符顺序,输出字符集合,即重复出现并靠后的字母不输出。

- 示例1:

	- 输入:
		abcqweracb
	- 输出:
		abcqwer

脚本:

 s = raw_input("please input alpha:")
 li = (list(s))
 if len(s) > 100:
     print "The max length of the string is 100!!"
 for i in s:
     if i == " " or not i.isalpha():
         print "Error:only input alpha!!"
         exit()
 for i1 in range(len(s)):
     for i2 in range(i1 + 1, len(s)):
         if li[i1] == li[i2]:
             li[i2] = " "
 print (" ".join(li)).replace(" ", "")

3.小米—句子反转
- 题目描述:
给定一个句子(只包含字母和空格), 将句子中的单词位置反转,单词用空格分割, 单词之间只有一个空格,前后没有空格。 比如: (1) “hello xiao mi”-> “mi xiao hello”

- 输入描述:
输入数据有多组,每组占一行,包含一个句子(句子长度小于1000个字符)

- 输出描述:
对于每个测试示例,要求输出句子中单词反转后形成的句子

- 示例1:

- 输入
    hello xiao mi
- 输出
    mi xiao hello

脚本:

 string = raw_input("please input string:")
 if len(string) > 1000:
     print "Max_length is 1000!!"
     exit()
 print " ".join(string.split()[::-1])

4.网易—字符串

小易喜欢的单词具有以下特性:
1.单词每个字母都是大写字母
2.单词没有连续相等的字母
例如:
小易不喜欢"ABBA",因为这里有两个连续的’B’
小易不喜欢"THETXH",因为这里包含子序列"THTH"
小易喜欢"A","ABA"和"ABCBA"这些单词
给你一个单词,你要回答小易是否会喜欢这个单词。

- 输入描述:
输入为一个字符串,都由大写字母组成,长度小于100

- 输出描述:
如果小易喜欢输出"Likes",不喜欢输出"Dislikes"

示例1 :

 输入
    AAA
输出
    Dislikes

脚本:

 s = raw_input("please input upper:")
 if len(s) >= 100:
     print "The Max length is 100!!"
     exit()
 for i in s:
     if not i.isupper():
         print "Dislikes"
         exit()
 s = list(s)
 for i1 in range(0,len(s)-1):
     if s[i1] == s[i1 + 1]:
         print "Dislikes"
         exit()
 for i2 in range(len(s)):
     for i3 in range(i2 + 2, len(s)):
         if s[i2] == s[i3]:
             for i4 in range(i3, len(s)):
                 if s[i2 + 1] == s[i4]:
                     print "Dislikes"
                     exit()
 print "Likes"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wielun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值