创建用于将非字母数字字符转换为短划线的Python类

2024-06-17 15:01:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Python创建一个类,将非字母数字字符转换为字符串列表的破折号

例如,我们有以下列表:inventory_list_1 = ['ABCDE : CE ; CUSTOMER : Account Number; New Sales', 'JKLEH : SC ; CLIENT : Record Number; old Sales']

我们希望最终结果是:inventory_list_2 = ['ABCDE-CE-CUSTOMER-AccountNumber-NewSales', 'JKLEH-SC-CLIENT-RecordNumber-oldSales']

我试图创建以下类,但没有成功。如何创建一个Python类来将非字母数字字符转换为字符串列表的破折号?如何执行类将inventory_list_1转换为inventory_list_2

class clean_data:
    def __init__(self, list):
        self.list = list
    def transform_data(self):
        for string_item in self.list:
            return re.sub('[^0-9a-zA-Z]+', '-', string_item)

print (clean_data(inventory_list_1))


Tags: 字符串selfnumber列表data字母数字customer
2条回答

任何函数只能执行一次return语句。在您的方法中,您尝试遍历所有列表项,然后返回每个修改的项。但是如上所述,只执行一个return语句,因此只返回第一个修改的元素,而不是整个列表

要返回所有修改的元素,请创建一个新列表,附加所有修改的元素,然后从函数返回新列表

def class clean_data:
    def __init__(self, list1):
         self.list1 = list1
    def transform_data(self):
         retList =[]
         for string_item in self.list1:
             retList.append(re.sub('[^0-9a-zA-Z]+', '-', string_item))
    return(retList)

inventory_list_1 = ['ABCDE : CE ; CUSTOMER : Account Number; New Sales', 'JKLEH : SC ; CLIENT : Record Number; old Sales']
print (clean_data(inventory_list_1).transform_data())

应该为类定义__repr__

import re

class clean_data:
    def __init__(self, list):
        self.list = list
    def transform_data(self):
        temp = []
        for string_item in self.list:
            temp.append(re.sub('[^0-9a-zA-Z]+', '-', string_item))
        return temp
    def __repr__(self):
        return str(self.list)

inventory_list_1 = ['ABCDE : CE ; CUSTOMER : Account Number; New Sales', 'JKLEH : SC ; CLIENT : Record Number; old Sales']
temp = clean_data(inventory_list_1)
inventory_list_2 = temp.transform_data()
print(inventory_list_2)

相关问题 更多 >