嗨,我想把有/没有-
,.
的元素过滤成两个列表。我的代码不能完成这项工作,它似乎每件事都要运行两次,而且不能同时替换-
和.
。我哪里做错了?你知道吗
代码:
NO_SYMBOL = []
WITH_SYMBOL = []
SPACE = []
for i in DATA:
for ch in ['-', '.']:
if ch in i:
WITH_SYMBOL.append(i)
SPACE.append(i.replace(ch, ' '))
else:
NO_SYMBOL.append(i)
数据
['volunteer-abroad',
'volunteer-abroad.com',
'volunteer-abroad.ie',
'volunteer-abroad.org',
'volunteerabroad']
我的输出:
SPACE
['volunteer abroad',
'volunteer abroad.com',
'volunteer abroad.ie',
'volunteer abroad.org',
'volunteer-abroad com',
'volunteer-abroad ie',
'volunteer-abroad org']
NO_SYMBOL
['volunteer-abroad', 'volunteerabroad', 'volunteerabroad']
我想得到如下输出:
SPACE
['volunteer abroad',
'volunteer abroad com',
'volunteer abroad ie',
'volunteer abroad org']
NO_SYMBOL
['volunteerabroad']
使用
for
循环分别处理这两个字符:for ch in ['-', '.']:
循环时,ch
被设置为'-'
。当在i
中找到该字符时,您将创建一个删除了-
的新字符串,并将其附加到SPACE
,i
本身附加到WITH_SYMBOL
。如果找不到字符,则附加到NO_SYMBOL
。你知道吗ch
被设置为'.'
,然后再次执行相同的工作。你知道吗因此,对于每个
SPACE
和WITH_SYMBOL
,或者对NO_SYMBOL
附加两次。你知道吗需要延迟追加,直到处理完
ch
中的所有字符,并且只有在循环完成时才决定追加到哪里。您可以使用标志变量:您也可以只测试其中一个字符是否存在,并对这两个字符使用
str.replace()
。这样做是安全的,str.replace()
不关心要替换的字符是否根本不存在:与使用两个} ;如果要替换的字符数可变,则这会更快,而且更灵活。对于后一种情况,可以使用^{} function 测试字符序列:
.replace()
调用不同,您还可以使用translation table passed to ^{我认为代码中的错误是由其他答案发现的-但是通过使用一个简单的正则表达式,您将获得更高的性能,并且可以在必须添加新符号以匹配时轻松地更改它:
在线演示here
您不需要在同一列表上运行两次循环,而是可以修改if条件
相关问题 更多 >
编程相关推荐