小明正在为完成一份某品牌各类产品的销量调研报告而努力。然而,她在开展工作的过程中遇到了一个棘手的问题:从网上下载的源数据(列表 source_data)状况十分糟糕,里面不仅混杂着大量毫无意义的文字,还充斥着各种乱码,导致这些数据几乎无法使用。你是否能够运用python,来帮助小明解决这个难题,完成数据清洗工作呢?
要求:
- 对于数字(包括整数和浮点数),统一存入列表 data 并打印;
- 对于字符串类型的无效数据,统一存入 wrong_data 并打印。
答案
source_data = [46.0, 53, 28.7, 66, '¥%@¥#%', '文字', 70, '¥%@¥#%', '这是一段乱码', '这是一段乱码', 51, 69, 'py', 92, 'ui', 'sah', 59, 42, '¥%@¥#%', 59, 88, '文字', 91, 'sah', '¥%@¥#%', 33, 'sah', 'py', 49, 69, 85, '¥%@¥#%', 'ui', '这是一段乱码', '文字', 'DAFDA', 22, '文字', 31, 58, 73, 82, 'sah', 'sah', 'DAFDA', 'DAFDA', '文字', 20, 15, 'sah', 58, 91, 36, '¥%@¥#%', 'py', '这是一段乱码', '文字', 22, '这是一段乱码', 'ui', 71, 35, '这是一段乱码', 'sah', 'DAFDA', 'ui', 'py', 'sah', '这是一段乱码', '文字', 97, '这是一段乱码', 27, 21, 39, '文字', 17.1, 31, 32, 70, 4, '¥%@¥#%', 50, '¥%@¥#%', 10, 'py', '文字', 'ui', 60, '这是一段乱码', 4, 'ui', 47, '文字', 'DAFDA', '这是一段乱码', 'DAFDA', 'DAFDA', 80, 52]
data = [num for num in source_data if isinstance(num, (int, float))]
wrong_data = [s for s in source_data if isinstance(s, str)]
print(data)
print(wrong_data)
列表推导式
通过一行代码生成新的列表,可以理解成简化的 for 循环,原型:
[expression for item in iterable if condition]
内置函数:isinstance()
用于判断数据类型,原型:
isinstance(object, classinfo)