python中的一些对数据的处理

-------------------------------------------------------------------------------

打开数据文件,从文件中读取数据行,由数据行创建一个列表。显示

with open('James.txt')as jaf:
    data=jaf.readline()
james=data.strip().split(',')

print(james)

strip()函数和trim()函数类似


-----------------------------------------------------------------------------

Python对数据排序,有两种选择,一种是原地排序,按照指定的顺序排列,然后用排序后的数据替换原来的数据。sort()方法

还有一种是复制排序,按照指定的顺序排序,然后返回原数据的一个有序副本,原数据的顺序依然保留。sorted()BIF

data=[0,4,7,2,3]

data.sort();
print(data)
#[0,2,3,4,7]
data.sort(reverse=True)
print(data)
#[7,4,3,2,0]

print(sorted(data))
#[0,2,3,4,7]
print(sorted(data,reverse=True))
#[7,4,3,2,0]

一些例子:

按照长度排序:

L = [{1:5,3:4},{1:3,6:3},{1:1,2:4,5:6},{1:9}]

def f(x):
    return len(x)

L.sort(key=f)
print(L)

结果:

[{1:9},{1:5,3:4},{1:3,6:3},{1:1,2:4,5:6}]


L = [('b',2),('a',1),('c',3),('d',4)]
#按照第二个关键字排序
print (sorted(L, key=lambda x:x[1]))


L = [('d',2),('a',4),('b',3),('c',2)]
#先按照第二个,如相同再按照第一个关键字排序
print (sorted(L, key=lambda x:(x[1],x[0])))

结果分别是:

[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
[('c', 2), ('d', 2), ('b', 3), ('a', 4)]

----------------------------------------------------------------------------

有时候,数据的不一致性会导致排序失败,比如我有一组数据:['2-25','2-55','2.18','2.58','2:39']本质上他们表示的是时间

def sanitize(time_string):
    
    if '-' in time_string:
        splitter='-'
    elif ':' in time_string:
        splitter=':'
    else:
        return (time_string)
    
    (mins,secs)=time_string.split(splitter)
    
    return (mins+'.'+secs)


---------------------------------------------------------------------------

下面两种方案功能相同

列表迭代:

clean_mikey=[]

for each_t in mikey:
    clean_mikey.append(sanitize(each_t))


列表推导:
clean_mikey=[sanitize(each_t) for each_t in mikey] 


---------------------------------------------------------------------------

如果列表项里面有重复项,为了删除重复项,可以用列表迭代:

unique_james=[]

for each_t in james:
    if each_t not in unique_james:
        unique_james.append(each_t)

#打印出前三项        
print(unique_james[0:3])

更好的可以用集合删除重复项:

distances=set()
distances={10.6,10.6,10.6,7,"1s"}
print(distances)
#{10.6,'1s',7}

或者:

distances.set(james)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值