仅记录本人某次面试所经历的问题,而且我的解答也并非完全正确,欢迎提出问题。
a = [1, 2]
b = [1, 3]
print(id(a), id(b)) # 地址不一样,一个改动,另一个自然也就不受影响
a = [1, 2]
b = a
print(id(a), id(b)) # 地址一样,一个改动,另一个会受影响
a = [1, 2, 3]
print(id(a))
a += [4]
print(id(a)) # 两次id一致
a = [1, 2, 3]
print(id(a))
a = a + [4]
print(id(a)) # 两次id不一致
a = [1, 2, 3]
b = a
print(id(a), id(b)) # id一致,因为是传递引用,而不是赋值引用
a = a + [4] # 等号左边产生了新内容,a也就指向了新内容
print(id(a), id(b)) # id不一致,很好理解:先前a,b共同'追求'[1,2,3],现在a转为'追求'[1,2,3,4]
print(b) # 打印[1,2,3],b的内容不受影响
a = [1, 2, 3]
b = a
print(id(a), id(b)) # id一致
a += [4] # 未产生新内容,属于'原地改变',所以a的指向也没变
print(id(a), id(b)) # id一致,因为上一步未改变指向
print(b) # 通过a改变了指向内容,而a,b指向一样,所以b也就受到了影响
class File(object):
def __init__(self, file_name, method):
self.file_obj = open(file_name, method)
def __enter__(self):
return self.file_obj
def __exit__(self, type, value, traceback):
print("Exception has been handled")
self.file_obj.close()
return True # 此处若是不返回True,在资源使用期间出现的异常会直接导致程序终止
with File('demo.txt', 'w') as opened_file:
opened_file.func()
# output
# Exception has been handled
注意: 假如程序都没进入__enter__()方法就异常了,也会直接终止程序。比如把11行改为File(‘demo.txt’, ‘r’),就会报错,因为__init__()方法就直接异常了(文件不存在,自然也就无法read)import pandas as pd
import numpy as np
import time
df = pd.DataFrame(np.random.randn(1000000, 14), index=pd.date_range('20180101 01', periods=1000000, freq='H'), columns=list('ABCDEFGHIJKLMN'))
df.to_csv('tst.csv')
s_time = time.time()
reader = pd.read_csv('tst.csv', chunksize=1000) # 每次读取1000行
for chunk in reader:
chunk.to_csv('tst_bak.csv', mode='a') # 向目标文件追加
print('costs time ', time.time() - s_time)
1.求字符串列表的最大公共子串
>>> ['gajsdlk', 'gasd', 'gae']
Out: ga
>>> ['gajsdlk', 'hasd', 'fae']
Out: 没有最大公共子串
我的解决方法
def func(str_arrays):
loop_count = min([len(s) for s in str_arrays])
common_str = ''
for i in range(loop_count):
for j, s in enumerate(str_arrays):
if s[:i+1] != str_arrays[0][:i+1]:
break
else:
common_str = str_arrays[0][:i+1]
if common_str == '':
return '没有最大公共子串'
return common_str
if __name__ == '__main__':
s_arrays = []
print(func(s_arrays))
缺点:第六行有一次多余比较(自己与自己比较);必定要循环最短字符串长度的次数,浪费时间,没有加标识来跳出循环