《Python數據處理》7.2.4筆記:尋找唯一鍵的源碼修改——由於zip方法

《Python數據處理》7.2.4筆記:尋找唯一鍵的源碼修改——由於zip方法

一、原因:zip方法

參考《python中使用zip函數出現》,原因是爲了節約內存,python3基於此對此進行了優化,輸出只輸出對象的內存位置而不打印出來。而在python2中可以直接輸出到屏幕,
解決方法:需要增加list

源碼:

set_keys = set(
        ['%s-%s-%s' % (x_[0][1], x_[1][1], x_[2][1]) for x_ in zipped_data]
    )#原爲x,c此處改爲x_
unique = [x_ for x_ in  zipped_data
              if not set_keys.remove('%s-%s-%s' % (x_[0][1], x_[1][1], x_[2][1]))
              ]

z直接運行報錯:TypeError: ‘zip’ object is not subscriptable
在這裏插入圖片描述

二、修改後

注:將之前的zipped_data變成了調用的函數,change_title()即爲zipped_data
def unique_value():
'''確定唯一值'''
try:
    x_list = []
    for x in change_title():
        x_list.append(list(x))
        # print(x_)
        '''由於zip()的輸出需要list()化'''
    set_keys = set(
        ['%s-%s-%s' % (x_[0][1], x_[1][1], x_[2][1]) for x_ in x_list]
    )
    print(len(set_keys))

    unique = [x_ for x_ in x_list
              if not set_keys.remove('%s-%s-%s' % (x_[0][1], x_[1][1], x_[2][1]))
              ]
    '''此處not的含義在於保障移除,且unique爲唯一值的變量,如果少了not就會變成空集,因爲均被移除'''
    pprint.pprint(unique)
    print('存在唯一值-----------------------------------------------------------------------')
except:
    print('不存在唯一值------------------------------------------------')

在這個列表推導式中:

unique = [x_ for x_ in x_list
              if not set_keys.remove('%s-%s-%s' % (x_[0][1], x_[1][1], x_[2][1]))
              ]

if not 與if沒有區別,只是作爲列表推導式的一個條件,以remove()方法的keyerror作爲唯一值存在與否的標誌,無論是if 還是 if not對此並無不同,if 、 if not只是對unique具有不同,前者導致[],後者導致唯一值的輸出

if時:

在這裏插入圖片描述

if not時:

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章