【问题标题】:logical way to clean up a list data type in python在python中清理列表数据类型的逻辑方法
【发布时间】:2020-04-07 23:10:43
【问题描述】:

大家好,我在列表数据类型中获得了很多数据,但我总是卡住无法清理它。更清楚地说,大多数字符串数据清理是使用 split()、strip() 和 replace() 方法完成的。但不幸的是,这些方法不适用于列表数据类型。

['2. Skoda\n', '3. Opel\n', '4. Audi\n', '5. Isuzu\n', '6. Acura\n', '7. Subaru \n', '8. Jaguar \n', '9. Jeep\n', 

'10.Mazda\n', '11.Mini\n', '12.Land Rover\n', '13.Lexus\n', '14.Saab\n', '15.Peugeot\n ', '16.雷诺\n', '17.Proton\n', '18.大宇\n', '19.雪铁龙\n', '20.双龙\n', '21.凯迪拉克\n', '22.Fiat\n', '23.Aston Martin\n', '24.Mercedes\n', '25.Mochi \n', '26.Mclaren \n', '27.Infiniti \n', ' 28.Lotus\n'、'29.Bentley\n'、'30.Maserati\n'、'31.Ferrari\n'、'32.Honda\n'、'33.Nissan\n'、'34.哈弗\n', '35.Ford\n', '36.Volvo\n', '37.Seat\n', '38.Toyota\n', '39.Perodua\n', '40.吉利\ n', '41.Mitsubishi \n', '41.Alfa Romeo \n', '42.Dahitsau\n', '43.Volkswagen\n', '44.Porsche \n', '45.Hyundai \n ', '46.Bugatti\n', '47.Lamborghini\n', '48.Rolls Royce\n', '49.Suzuki\n', '50.Tesla']

所以基本上,有没有办法删除逗号、空格和换行符。 ?

【问题讨论】:

  • 你可以map()你的函数到列表元素上,或者使用列表推导对每个列表元素应用你想要的任何转换

标签: python list


【解决方案1】:

您在使用您提到的函数方面走在了正确的轨道上,并且您不能将它们应用于列表数据类型。但是,您可以做的是遍历列表并针对列表的内容执行这些函数。

data_arr = ['2. Skoda\n', '3. Opel\n']
junk_chars = list(",.\n")
for i, entry in enumerate(data_arr):
  for junk_char in junk_chars:
    entry = entry.replace(junk_char, "")
  data_arr[i] = entry

我建议不要在这种情况下使用列表推导式,因为您不会为每个条目替换单个字符,但是,如果您愿意,您可以运行如下内容:

data_arr = ['2. Skoda\n', '3. Opel\n']
data_arr = [entry.replace(",","").replace("\n","") for entry in data_arr]

您也可以按照上面的评论使用 map():

def clean_entries(entry: str) -> str:
 junk_chars = list(",.\n")
 for junk_char in junk_chars:
   entry = entry.replace(junk_char, "")
 return entry

data_arr = ['2. Skoda\n', '3. Opel\n']
data_arr = map(clean_entries, data_arr)

【讨论】:

  • 感谢您的指导……你们是最棒的。所有选项都有效,但列表理解是最好的选择,也是最直接的。我今天又学到了一些新东西。但是为了进一步了解这些函数是如何在“列表理解”中工作的,而不是单独工作。知道为什么吗?
  • 当然可以。列表推导相当于说“对列表中的每个元素执行此操作”。当您将它与诸如 replace() 之类的东西结合使用时会发生什么,它会在列表中的每个条目上运行该操作。如果你在整个列表上运行 replace(),你就不是在使用 replace() 可以理解的数据类型,因为它只能处理单个字符串。
  • 再次感谢@SilverNitratelon。你是最有帮助的。
【解决方案2】:

一种方法是使用正则表达式

import re
oldList = ['2. Skoda\n', '3. Opel\n', '4. Audi\n', '5. Isuzu\n', '6. Acura\n', '7. Subaru \n', '8. Jaguar \n', '9. Jeep\n','10.Mazda\n', '11.Mini\n', '12.Land Rover\n', '13.Lexus\n', '14.Saab\n', '15.Peugeot \n', '16.Renault \n', '17.Proton\n', '18.Daewoo \n', '19.Citroen \n', '20.SsangYong\n', '21.Cadillac \n', '22.Fiat\n', '23.Aston Martin\n', '24.Mercedes\n', '25.Mochi \n', '26.Mclaren \n', '27.Infiniti \n', '28.Lotus\n', '29.Bentley \n', '30.Maserati\n', '31.Ferrari \n', '32.Honda\n', '33.Nissan\n', '34.Haval\n', '35.Ford\n', '36.Volvo\n', '37.Seat\n', '38.Toyota\n', '39.Perodua \n', '40.Geely \n', '41.Mitsubishi \n', '41.Alfa Romeo \n', '42.Dahitsau\n', '43.Volkswagen\n', '44.Porsche \n', '45.Hyundai \n', '46.Bugatti\n', '47.Lamborghini\n', '48.Rolls Royce \n', '49.Suzuki\n', '50.Tesla']
newList = []
for str in oldList:
    newList.append(re.sub(r'[, \n]+', "", str))
print(newList)

我注意到它也删除了单词之间的空格。阿尔法罗密欧变成阿尔法罗密欧,劳斯莱斯变成劳斯莱斯。需要注意的地方

【讨论】:

    猜你喜欢
    • 2021-12-25
    • 2011-09-28
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 2017-04-26
    • 2021-05-27
    相关资源
    最近更新 更多