文件操作
1.有一個jsonline格式的文件file.txt大小約爲10K
def get_lines():
with open('file.txt','rb') as f:
return f.readlines()
if __name__ == '__main__':
for e in get_lines():
process(e) # 處理每一行數據
現在要處理一個大小爲10G的文件,但是內存只有4G,如果在只修改get_lines 函數而其他代碼保持不變的情況下,應該如何實現?需要考慮的問題都有那些?
def get_lines():
with open('file.txt','rb') as f:
for i in f:
yield i
from mmap import mmap
def get_lines(fp):
with open(fp,"r+") as f:
m = mmap(f.fileno(), 0)
tmp = 0
for i, char in enumerate(m):
if char==b"\n":
yield m[tmp:i+1].decode()
tmp = i+1
if __name__=="__main__":
for i in get_lines("fp_some_huge_file"):
print(i)
要考慮的問題有:內存只有4G無法一次性讀入10G文件,需要分批讀入分批讀入數據要記錄每次讀入數據的位置。分批每次讀取數據的大小,太小會在讀取操作花費過多時間
模塊與包
3.輸入日期, 判斷這一天是這一年的第幾天?
import datetime
def dayofyear():
year = input("請輸入年份: ")
month = input("請輸入月份: ")
day = input("請輸入天: ")
date1 = datetime.date(year=int(year),month=int(month),day=int(day))
date2 = datetime.date(year=int(year),month=1,day=1)
return (date1-date2).days+1
4.打亂一個排好序的list對象alist?
import random
alist = [1,2,3,4,5]
random.shuffle(alist)
print(alist)
數據類型
5.現有字典 d= {'a':24,'g':52,'i':12,'k':33}請按value值進行排序?
sorted(d.items(),key=lambda x:x[1])
x[0]代表用key進行排序;x[1]代表用value進行排序。
7.請反轉字符串 "aStr"?
print("aStr"[::-1])
8.將字符串 "k:1 |k1:2|k2:3|k3:4",處理成字典 {k:1,k1:2,...}
str1 = "k:1|k1:2|k2:3|k3:4"
def str2dict(str1):
dict1 = {}
for iterms in str1.split('|'):
key,value = iterms.split(':')
dict1[key] = value
return dict1
#字典推導式
d = {k:int(v) for t in str1.split("|") for k, v in (t.split(":"), )}
9.請按alist中元素的age由大到小排序
alist = [{'name':'a','age':20},{'name':'b','age':30},{'name':'c','age':25}]
def sort_by_age(list1):
return sorted(alist,key=lambda x:x['age'],reverse=True)
10.下面代碼的輸出結果將是什麼?
list = ['a','b','c','d','e']
print(list[10:])
代碼將輸出[],不會產生IndexError錯誤,就像所期望的那樣,嘗試用超出成員的個數的index來獲取某個列表的成員。例如,嘗試獲取list[10]和之後的成員,會導致IndexError。然而,嘗試獲取列表的切片,開始的index超過了成員個數不會產生IndexError,而是僅僅返回一個空列表。這成爲特別讓人噁心的疑難雜症,因爲運行的時候沒有錯誤產生,導致Bug很難被追蹤到。
11.寫一個列表生成式,產生一個公差爲11的等差數列
print([x*11 for x in range(10)])
12.給定兩個列表,怎麼找出他們相同的元素和不同的元素?
list1 = [1,2,3]
list2 = [3,4,5]
set1 = set(list1)
set2 = set(list2)
print(set1 & set2)
print(set1 ^ set2)
13.請寫出一段python代碼實現刪除list裏面的重複元素?
l1 = ['b','c','d','c','a','a']
l2 = list(set(l1))
print(l2)
用list類的sort方法:
l1 = ['b','c','d','c','a','a']
l2 = list(set(l1))
l2.sort(key=l1.index)
print(l2)
也可以這樣寫:
l1 = ['b','c','d','c','a','a']
l2 = sorted(set(l1),key=l1.index)
print(l2)
也可以用遍歷:
l1 = ['b','c','d','c','a','a']
l2 = []
for i in l1:
if not i in l2:
l2.append(i)
print(l2)
14.給定兩個list A,B ,請用找出A,B中相同與不同的元素
A,B 中相同元素: print(set(A)&set(B)) A,B 中不同元素: print(set(A)^set(B))