使用理解从字符串列表中删除字符
Remove characters from list of strings using comprehension
我想知道如何从字符串列表中删除某些字符。
在这种情况下,我尝试使用列表推导删除类型 str
的 numbers
。
numbers = [str(i) for i in range(10)]
imgs_paths = [os.path.join(input_folder, f) for f in os.listdir(input_folder) if f.endswith('.jpg')]
foo_imgs_paths = [[e.replace(c, "") for c in e if c not in numbers] for e in imgs_paths]
上面的代码不起作用,因为它 returns 完全是空列表。
选项 1
如果我对你的问题理解正确,函数可能比嵌套理解更能简化它。
"doj394no.jpg".replace("0","").replace("1","")... # "dojno.jpg"
如果您有要删除的文件列表和字符列表:
files = [...]
numbers = "01234556789"
def remove_chars(original, chars_to_remove):
for char in chars_to_remove:
original = original.replace(char, "")
return original
new_files = [remove_chars(file, numbers) for file in files]
选项 2
如果您真的想要使用推导式,您可以使用它们来过滤字母而无需替换:
numbers = "0123456789"
filename = "log234.txt"
[char for char in filename if char not in numbers] # ["l","o","g",".","t","x","t"]
# To return it to a string:
"".join([char for char in filename if char not in numbers]) # "log.txt"
在你的情况下,它会像这样:
numbers = [str(i) for i in range(10)]
imgs_paths = [os.path.join(input_folder, f) for f in os.listdir(input_folder) if f.endswith('.jpg')]
foo_imgs_paths = [
"".join(char for char in img_path if char not in numbers)
for img_path in img_paths
]
为什么不使用正则表达式?
import re
re.sub(r'\d+', '', 'lo2g4.jpg')
'log.jpg'
再提供一个解决方案:
old_str = "S11imone22.jpg"
new_str = old_str.translate(str.maketrans("", "", "0123456789"))
print(new_str) # Simone.jpg
我还是更喜欢 re 解决方案,它更快
我想知道如何从字符串列表中删除某些字符。
在这种情况下,我尝试使用列表推导删除类型 str
的 numbers
。
numbers = [str(i) for i in range(10)]
imgs_paths = [os.path.join(input_folder, f) for f in os.listdir(input_folder) if f.endswith('.jpg')]
foo_imgs_paths = [[e.replace(c, "") for c in e if c not in numbers] for e in imgs_paths]
上面的代码不起作用,因为它 returns 完全是空列表。
选项 1
如果我对你的问题理解正确,函数可能比嵌套理解更能简化它。
"doj394no.jpg".replace("0","").replace("1","")... # "dojno.jpg"
如果您有要删除的文件列表和字符列表:
files = [...]
numbers = "01234556789"
def remove_chars(original, chars_to_remove):
for char in chars_to_remove:
original = original.replace(char, "")
return original
new_files = [remove_chars(file, numbers) for file in files]
选项 2
如果您真的想要使用推导式,您可以使用它们来过滤字母而无需替换:
numbers = "0123456789"
filename = "log234.txt"
[char for char in filename if char not in numbers] # ["l","o","g",".","t","x","t"]
# To return it to a string:
"".join([char for char in filename if char not in numbers]) # "log.txt"
在你的情况下,它会像这样:
numbers = [str(i) for i in range(10)]
imgs_paths = [os.path.join(input_folder, f) for f in os.listdir(input_folder) if f.endswith('.jpg')]
foo_imgs_paths = [
"".join(char for char in img_path if char not in numbers)
for img_path in img_paths
]
为什么不使用正则表达式?
import re
re.sub(r'\d+', '', 'lo2g4.jpg')
'log.jpg'
再提供一个解决方案:
old_str = "S11imone22.jpg"
new_str = old_str.translate(str.maketrans("", "", "0123456789"))
print(new_str) # Simone.jpg
我还是更喜欢 re 解决方案,它更快