在字符串中循环并仅返回某些字符。python
我在创建一个函数时遇到了一个问题,该函数应该首先返回小写字母“25;”和“.”,然后依次返回大写字母“,”和“|”。我的版本似乎也会返回数字和特殊字符,比如@,这是我不希望它做的,它应该只读取输入字符串一次,我不知道我的代码是否实现了这一点 我的代码是:在字符串中循环并仅返回某些字符。python,python,Python,我在创建一个函数时遇到了一个问题,该函数应该首先返回小写字母“25;”和“.”,然后依次返回大写字母“,”和“|”。我的版本似乎也会返回数字和特殊字符,比如@,这是我不希望它做的,它应该只读取输入字符串一次,我不知道我的代码是否实现了这一点 我的代码是: def split_iterative(n): splitted_first = "" splitted_second = "" for i in n: if i == i.lower() or i ==
def split_iterative(n):
splitted_first = ""
splitted_second = ""
for i in n:
if i == i.lower() or i == "_" or i == ".":
splitted_first = splitted_first + i
elif i == i.upper() or i == " " or i == "|":
splitted_second = splitted_second + i
return splitted_first + splitted_second
如果我做s
plit_迭代('lMiED)teD5E,_hLAe;Nm,0@Dli&例如,4aI?rN@T§&e7#4E#您可以使用ASCII值过滤字符:
def split_iterative(n):
splitted_first = ""
splitted_second = ""
for i in n:
if ord(i) in range(97,122) or i == "_" or i == ".":
splitted_first = splitted_first + i
elif ord(i) in range(65,90) or i == " " or i == "|":
splitted_second = splitted_second + i
return (splitted_first , splitted_second)
首先,要让它返回一个列表,不要返回连接的字符串,而是一个列表
其次,您没有检查或过滤掉字符,一种方法是使用isalpha()方法检查字符是否为字母
大概是这样的:
def split_iterative(n):
splitted_first = ""
splitted_second = ""
for i in n:
if (i.isalpha() and i == i.lower()) or i == "_" or i == ".":
splitted_first = splitted_first + i
elif (i.isalpha() and i == i.upper()) or i == " " or i == "|":
splitted_second = splitted_second + i
#returns a list you can make it a variable if you need
return [splitted_first, splitted_second]
你可以试试这个:
def f(input_string):
str1 = str2 = ""
for character in input_string:
if character.isalpha():
if character.islower():
str1 += character
else:
str2 += character
elif character in "_.":
str1 += character
elif character in " |":
str2 += character
return str1, str2
输出:
>>> input_string = "'lMiED)teD5E,_hLAe;Nm,0@Dli&Eg ,#4aI?rN@T§&e7#4E #<(S0A?<)NT8<0'"
>>>
>>> print f(input_string)
('lite_hemligare', 'MEDDELANDE INTE SANT')
>>>
>>输入字符串=“'lMiED)teD5E,\u hLAe;纳米,0@Dli&例如,4aI?rN@T§&e7#4E#在浏览文本中的字符时,可以使用两个列表
可以在一个列表中添加小写、下划线和停止字符,然后在另一个列表中添加大写、空格和管道字符
最后返回作为字符串连接的每个列表的元组
def splittext(txt):
slug, uppercase_letters = [], []
slug_symbols = {'_', '.'}
uppercase_symbols = {' ', '|'}
for letter in txt:
if letter.islower() or letter in slug_symbols:
slug.append(letter)
if letter.isupper() or letter in uppercase_symbols:
uppercase_letters.append(letter)
return ''.join(slug), ''.join(uppercase_letters)
txt="'lMiED)teD5E,_hLAe;Nm,0@Dli&Eg ,#4aI?rN@T§&e7#4E #<(S0A?<)NT8<0'"
assert splittext(txt) == ("lite_hemligare", "MEDDELANDE INTE SANT")
def拆分文本(txt):
slug,大写字母=[],[]
slug_符号={'''u','.}
大写字母_符号={'','|'}
对于txt格式的字母:
如果字母.islower()或slug_符号中的字母:
slug.append(字母)
如果字母.isupper()或大写字母_符号:
大写字母。附加(字母)
返回“”。连接(slug),“”。连接(大写字母)
txt=“'lMiED)teD5E,_hLAe;Nm,0@Dli&例如,4aI?rN@T§&e7#4E#这是因为您正在迭代字符串。特殊字符的小写字母与字符相同。即,'#'。lower()='#'
。因此它将返回'#'和所有其他特殊字符。您应该使用isalpha()显式检查字母表方法在字符串上执行。
(i.isalpha()和i.lower()==i)或i=''或i='.
问题是i.lower()和i.upper()在给定数字或特殊字符时返回相同的输出。这可能是正则表达式字符类的情况,类似于[\w.|]
,然后进行自定义排序以获得所需的订单。将最后一行更改为返回(先拆分,再拆分)
如果你想要一个元组而不是字符串,很抱歉。描述不是100%清楚,我认为\u
应该在小写字母之后。你的方法看起来是正确的。我认为这可能会发生,因为循环中每次都会创建这些集。啊哈,如果你用字符串替换这些集,你的方法将变为~8秒ter.14.916232824325562 vs.22.767919063568115.Python生成字符串一次。因此每次它都会重复使用相同的字符串。s=“jDo”g=“jDo”assert id==id(g)
@jDo Try导入dis;dis.dis(compile)(“a=”、“,”,“,“exec”)
@StefanPochmann您说得对。Set不是不可变的数据类型。