Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在字符串中循环并仅返回某些字符。python_Python - Fatal编程技术网

在字符串中循环并仅返回某些字符。python

在字符串中循环并仅返回某些字符。python,python,Python,我在创建一个函数时遇到了一个问题,该函数应该首先返回小写字母“25;”和“.”,然后依次返回大写字母“,”和“|”。我的版本似乎也会返回数字和特殊字符,比如@,这是我不希望它做的,它应该只读取输入字符串一次,我不知道我的代码是否实现了这一点 我的代码是: def split_iterative(n): splitted_first = "" splitted_second = "" for i in n: if i == i.lower() or i ==

我在创建一个函数时遇到了一个问题,该函数应该首先返回小写字母“25;”和“.”,然后依次返回大写字母“,”和“|”。我的版本似乎也会返回数字和特殊字符,比如@,这是我不希望它做的,它应该只读取输入字符串一次,我不知道我的代码是否实现了这一点

我的代码是:

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不是不可变的数据类型。