随便记点迭代和容器等

在Python中,list是全局对象,所以在函数中创建的list也可以return。
读写csv文档,对字符串等进行处理时经常需要放入list/别的如set去重,
处理也用循环的场合要注意生成list的位置,写在别的地方太远了不方便阅读,但又不能写在最里层的循环,否则每次迭代都重新绑定空列表等于无用功。
在多重循环中间创建对象做什么?
需要统计内层循环,同时需要在外层循环每次迭代时重新绑定空对象时使用

import csv
import jieba
with open('D:\sql.csv', 'r', encoding='gb18030') as file:
    f = csv.reader(file)
    for line in f:
        text = jieba.lcut(line[2])  #此处csv文件第3列才是文本
        luca=[]
        for i in text:
            id, text = line
            for row in text.split('。'):
                if '路卡' in row:
                    textdata += (row + '。')
            luca.append((id, textdata))

写入csv(多行、多列)的代码

import csv

#csv含中文用utf-8个人测试时会写入乱码
#newline参数设为空避免写入一行后空一行再写入的问题
with open(file, t, newline = '', encoding = 'gb18030') as f: 
    w = csv.writer(f)
    for line in atuple:
        id, text = line
        textdata = ''
        for row in text.split('。'):
            if '路卡' in row:
                textdata += (row + '。')
        alldata.append((id, textdata))
    w.writerows(alldata)#writerows()一并写入多行,若writerow()写入1行需要缩进到上层循环

吐槽一下,phpadmin中的sql对某列的值判是否为空是用<>''而不是not null...
个人不喜欢用<>表示不等于,毕竟从C++过来的习惯!=
就Python而言两种写法都可以,sql好像也是这样。

sql不区分大小写,但Python等区分。

select * from tableName where columnName like '%luca%'

可以识别luca,LUCA,Luca,LUca,...
而Python等

if 'luca' in text or 'Luca' in text or ...

就性能而言,此处text最好不要是list,例如:

lucalist = ['luca', 'Luca', 'LUCA', ......]
print('LUca' in lucalist)

print('LUca' in set(lucalist))

性能差别前者list是遍历查找,虽然没写实际上还是for循环,复杂度是O(n)
而set()中查找是O(1)

你可能感兴趣的:(随便记点迭代和容器等)