python中难的算法_一个python的比较难的算法,有懂的人可以进来一下
問 題
我的需求:
結構數據是這樣的:
要求按照這樣的公式:
組合一: 時間詞+地方詞+動詞+等級+名詞+價格詞;
比如
2016年深圳大鵬新區給健康全身檢查要多少錢
就是按照這樣的公式組合出來的關鍵詞
那么有什么辦法用最短的辦法來實現,我下面是我的算法,用pandas的算法:
for times in df[df["時間詞"].notnull()]["時間詞"]:
for area in df[df["地方詞"].notnull()]["地方詞"]:
for dong in df[df["動詞"].notnull()]["動詞"]:
for leave in df[df["等級"].notnull()]["等級"]:
for name in df[df["名詞"].notnull()]["名詞"]:
for price in df[df["價格詞"].notnull()]["價格詞"]:
data = (times+area+dong+leave+name+price)
但是這樣的代碼太不優雅,而且封裝成函數太難~
我想要的效果是這樣的:
比如:
我寫一個公式
cols = ["時間詞","地方詞","動詞","等級","名詞","價格詞"]
#或則是
cols = ["地方詞","動詞","等級","名詞","價格詞"]
然后把這個列表傳入一個函數中,就可以得出我上面的效果~
這個要如何實現?
補充一下,如果看不懂提問的人可以這樣理解這個題目
我有3個列表:
a = ["1","2","3","4","5"]
b = ["a","b","c"]
c = ["A","B"]
我要這樣的組合: a中的每個元素和b,c中的每個元素都進行組合
這個一個很簡單的多重循環就可以解決:
for A in a:
for B in b:
for C in c:
print (A+B+C)
這當然很簡單,但是假如我有10000個這樣的列表要重組?
難不成要手工復制黏貼每個循環10000次?這顯然不太現實
在python中有沒有比較好的函數或是比較好的方法來實現這個東西?
改問題已經解決,要感謝Taku的解答.完全符合需求
附上我修改后的代碼
import itertools
def zuhe(cols):
b = pd.Series()
for col in cols:
b = b.append(pd.Series({col:list(df[df[col].notnull()][col])}))
for x in itertools.product(*(b.values)):
print (x)
zuhe(cols = ["時間詞","地方詞","動詞"])
只需要傳入需要組合的列表詞,就可以得到結果!!
解決方案
試試itertools
import itertools
for x in itertools.product([1,2,3,4],[2,3,4],[1,1,2,2,3,3]):
print x
哈哈,其實就是一個求笛卡爾積的問題
要學會組織關鍵詞,善用搜索
掃一掃關注IT屋
微信公眾號搜索 “ IT屋 ” ,選擇關注與百萬開發者在一起
總結
以上是生活随笔為你收集整理的python中难的算法_一个python的比较难的算法,有懂的人可以进来一下的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: numpy 转置_Numpy基础:数组转
- 下一篇: c++ amp vs2017 报错_op