说我有一个字符串列表,例如'12hell0'
,我想将其简化为'hello'
。
我的想法是:
words = ['12hell0','123word', ...]
for word in words:
stripped = ''.join([i for i in word if not i.isdigit()]
我知道这会创建“地狱”,有没有一种方法可以检查它是否为“ 0”,然后替换为“ o”?不确定如何构造具有多个条件的理解,但是使用正则语句会像这样:
for word in words:
stripped = ''
word.replace('0','o')
for char in word:
if not char.isdigit():
stripped+=char
谢谢您的帮助或指导!
答案 0 :(得分:2)
如果您真的想使代码看起来不太容易理解(双关语意),则可以单线执行:
"".join(['o' if i == '0' else i for i in "123hell0" if not i.isdigit() or i=='0'])
我们可以将其分解:
'o' if i == '0' else i
-将'0'
替换为'o'
额外的条件...or i=='0'
将使它即使是数字也取零。
答案 1 :(得分:1)
我认为您走在正确的道路上,仅使用列表理解可能会变得难以理解,在这种情况下,将替换逻辑拆分为一个函数可能是最清晰的解决方案。这样,您可以应用更多的逻辑或稍后改变主意,而不必打扰太多的代码。
def replaceDigits(word):
stripped = ""
for char in word:
if char == "0":
stripped += "o"
elif not char.isdigit():
stripped += char
return stripped
words = ['12hell0', '123word']
stripped = [replaceDigits(n) for n in words]
print(stripped)
答案 2 :(得分:1)
您可以编写一些transform()函数,将所有子字符串替换为要为表面结构生成的字符串,仅当布尔值为True时,才将其应用于i:
stripped = ''.join([transform(i) for i in word if not i.isdigit()]
嵌套条件在列表理解中是不可能的, 因此,如果需要,请使用循环。
答案 3 :(得分:1)
这是一种通过列表理解来实现的方法,尽管我会建议这样做,因为它最终不太容易理解。
我们遍历单词列表,对于每个单词,如果找到 NameError Traceback (most recent call
last)
<ipython-input-55-c57503438675> in <module>
----> 1 new = [ Behrad, Mohammad, Behrad, Behrad, Leyla, Bahman]
2 while Behrad in new: new.remove(Behrad)
3 print(new)
NameError: name 'Behrad' is not defined
,则取字符'o'
;如果找到其他数字,则取空字符'0'
;并且其他情况下的角色本身,并通过''
str.join
输出将为
words = ['12hell0','123word']
words = [''.join('o' if c == '0' else '' if c.isdigit() else c for c in word) for word in words]
print(words)
答案 4 :(得分:1)
对于i == '0'
:
words =['12hell0','123word']
new_words = []
for word in words:
stripped = ''.join([i if not i.isdigit() else 'o' if i == '0' else '' for i in word])
new_words.append(stripped)
print(new_words)
输出:
['hello', 'word']
答案 5 :(得分:1)
您可以这样做:
words = ['12hell0','123word', ...]
new_words = [] # This will receive the changed words
for word in words: # Iterating through array elements
# This will store the new word.
new_word = ''.join([ch.replace('0', 'o') for ch in word if not ch.isdigit() or ch == '0'])
new_words.append(new_word)
print(new_words)
注意::这可能不是很多Python语言。我建议使用分开的方法,而不是这种方式。代码必须清晰易读,这样会使其他开发人员难以维护。
列表理解很棒,但是要小心。
答案 6 :(得分:1)
您可以在python中使用正则表达式库。模式'[^ \ d] +'搜索一组连续的非数字字符。
代码:
import re
words = ['12hell0','123word']
new_words = [word.replace('0','o') for word in words]
stripped = [re.search('[^\d]+',word).group() if re.search('[^\d]+',word) else '' for word in new_words]
输出:['hello','word']
答案 7 :(得分:0)
这是功能编程方式:
f = lambda arg: list(
map(
lambda i: "".join(filter(
lambda j: j.isalpha(), i.replace("0", "o"))
), arg
)
)
words = ['12hell0','123word']
print(f(words))
# ['hello', 'word']
答案 8 :(得分:0)
尝试一下
</div>
@section scripts{
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<scritp>
$(document).ready(function () {
alert('Test');
});
</scritp>
}