簡體   English   中英

使用理解從字符串列表中刪除字符

[英]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]

上面的代碼不起作用,因為它返回完全空的列表。

選項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解決方案,速度更快

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM