pythonitertools
㈠ python中對list去重的多種方法
python中對list去重的多種方法
今天遇到一個問題,在同事隨意的提示下,用了 itertools.groupby 這個函數。不過這個東西最終還是沒用上。
問題就是對一個list中的新聞id進行去重,去重之後要保證順序不變。
直觀方法
最簡單的思路就是:
這樣也可行,但是看起來不夠爽。
用set
另外一個解決方案就是用set:
代碼如下:
ids = [1,4,3,3,4,2,3,4,5,6,1]
ids = list(set(ids))
這樣的結果是沒有保持原來的順序。
按照索引再次排序
最後通過這種方式解決:
代碼如下:
ids = [1,4,3,3,4,2,3,4,5,6,1]
news_ids = list(set(ids))
news_ids.sort(ids.index)
使用itertools.grouby
文章一開始就提到itertools.grouby, 如果不考慮列表順序的話可用這個:
代碼如下:
ids = [1,4,3,3,4,2,3,4,5,6,1]
ids.sort()
it = itertools.groupby(ids)
for k, g in it:
print k
關於itertools.groupby的原理可以看這里:http://docs.python.org/2/library/itertools.html#itertools.groupby
網友補充:用rece
網友reatlk留言給了另外的解決方案。我補充並解釋到這里:
代碼如下:
In [5]: ids = [1,4,3,3,4,2,3,4,5,6,1]
In [6]: func = lambda x,y:x if y in x else x + [y]
In [7]: rece(func, [[], ] + ids)
Out[7]: [1, 4, 3, 2, 5, 6]
上面是我在ipython中運行的代碼,其中的 lambda x,y:x if y in x else x + [y] 等價於 lambda x,y: y in x and x or x+[y] 。
㈡ python itertools 沒有
us by night, but on the colonel
㈢ 把一個集合分成n個小集合(python)
#python3的代碼
importitertools
defbs(lst,n):
returnlist(itertools.combinations(lst,n))
print(bs([0,1,2,3],3))
[(0,1,2),(0,1,3),(0,2,3),(1,2,3)]
㈣ python itertools怎麼從1開始
import itertools
listone = ['a','b','c']
listtwo = ['11','22','abc']
for item in itertools.chain(listone,listtwo):
print item
㈤ python的高級特徵及用法介紹
【導讀】Python 是一種美麗的語言,它簡單易用卻非常強大。任何編程語言的高級特徵通常都是通過大量的使用經驗才發現的。比如你在編寫一個復雜的項目,並在
stackoverflow 上尋找某個問題的答案,然後你突然發現了一個非常優雅的解決方案,它使用了你從不知道的 Python
功能,下面就給大家進行python的高級特徵及用法介紹。
1、Map 函數
Map() 是一種內置的 Python
函數,它可以將函數應用於各種數據結構中的元素,如列表或字典。對於這種運算來說,這是一種非常干凈而且可讀的執行方式。
2、Lambda 函數
Lambda 函數是一種比較小的匿名函數——匿名是指它實際上沒有函數名。
Python 函數通常使用 def a_function_name() 樣式來定義,但對於 lambda 函數,我們根本沒為它命名。這是因為 lambda
函數的功能是執行某種簡單的表達式或運算,而無需完全定義函數。
lambda 函數可以使用任意數量的參數,但表達式只能有一個。
3、Generator 函數
Generator 函數是一個類似迭代器的函數,即它也可以用在 for 循環語句中。這大大簡化了你的代碼,而且相比簡單的 for
循環,它節省了很多內存。
4、Filter 函數
filter 內置函數與 map 函數非常相似,它也將函數應用於序列結構(列表、元組、字典)。二者的關鍵區別在於 filter() 將只返回應用函數返回
True 的元素。
5、Itertools 模塊
Python 的 Itertools 模塊是處理迭代器的工具集合。迭代器是一種可以在 for 循環語句(包括列表、元組和字典)中使用的數據類型。
使用 Itertools 模塊中的函數讓你可以執行很多迭代器操作,這些操作通常需要多行函數和復雜的列表理解。
以上就是python的高級特徵及用法介紹,希望對於大家的python學習能有所幫助,想要學習更多的python高級技能,希望大家持續關注!
㈥ python3中itertools.count接受step參數么
函數是根據他們的位置來計算組合的,而不是他們的值.所以有重復的結果。 for i in permutations([1, 1, 3], 3): print i (1, 1, 3)(1, 3, 1)(1, 1, 3)(1, 3, 1)(3, 1, 1)(3, 1, 1)>>>
㈦ python怎麼生成list的所有元素的組合
生成排列可以用proct:
from itertools import proct
l = [1, 2, 3]
print list(proct(l, l))
print list(proct(l, repeat=4))
組合的話可以用combinations:
from itertools import combinations
print list(combinations([1,2,3,4,5], 3))
下面是我以為沒有combinations然後自己寫的,沒有itertools的python(2.6以下)可供參考。
import
def combine(l, n):
answers = []
one = [0] * n
def next_c(li = 0, ni = 0):
if ni == n:
answers.append(.(one))
return
for lj in xrange(li, len(l)):
one[ni] = l[lj]
next_c(lj + 1, ni + 1)
next_c()
return answers
print combine([1, 2, 3, 4, 5], 3)
輸出:
[[1, 2, 3], [1, 2, 4], [1, 2, 5], [1, 3, 4], [1, 3, 5], [1, 4, 5], [2, 3, 4], [2, 3, 5], [2, 4, 5], [3, 4, 5]]
㈧ python 如何找出一串字元的最小重復單元,並計數
#!/usr/bin/envpython
#coding=utf-8
"""
python如何找出一串字元的最小重復單元,並計數_網路知道
http://..com/question/748872238157566212.html?push=asking&entry=qb_home_new&hitpolicy=0
"""
from__future__import(absolute_import,division,print_function,
unicode_literals,with_statement)
importitertools
defgroup(n,iterable):
"""groupitemstoiterablesofsizen.
.
Args:
n:groupbythisnumber
iterable:anyiterable
"""
ifn<1:
raiseValueError("groupbyN,Nshouldbeatleast1")
one_element=[]
forindex,einitertools.izip(itertools.cycle(range(n)),iterable):
one_element.append(e)
ifindex==n-1:
yieldone_element[:]
one_element=[]
ifone_element:
yieldone_element
deffind_minimum_repeat_unit(text):
""".
Args:
text:thestringtotest.
Return:
(unit,repeat_times)
"""
l=len(text)
foriinrange(l):
unit_length=i+1
ifl%unit_length!=0:
continue
sequences=list(group(unit_length,text))
foreinsequences[1:]:
#print("comparing%swith%s"%(e,sequences[0]))
ife!=sequences[0]:
break
else:
return"".join(sequences[0]),l//unit_length
assertFalse#neverreach
deftest_find_minimum_repeat_unit():
assertfind_minimum_repeat_unit("hahaha")==("ha",3)
assertfind_minimum_repeat_unit("habhabhab")==("hab",3)
assertfind_minimum_repeat_unit("hhhhhhhhh")==("h",9)
assertfind_minimum_repeat_unit("abcdabcdabcd")==("abcd",3)
defmain():
text=raw_input("inputstring:")
unit,times=find_minimum_repeat_unit(text)
print("minimumrepeatunitis"%s",repeated%stimes"%(unit,times))
if__name__=='__main__':
main()
運行效果:
inputstring:123123123
minimumrepeatunitis"123",repeated3times
inputstring:hahaha
minimumrepeatunitis"ha",repeated3times
㈨ python怎麼實現矩陣的轉置
需求:
你需要轉置一個二維數組,將行列互換.
討論:
你需要確保該數組的行列數都是相同的.比如:
arr = [[1, 2, 3], [4, 5, 6], [7,8, 9], [10, 11, 12]]
列表遞推式提供了一個簡便的矩陣轉置的方法:
print [[r[col] for r in arr] for col in range(len(arr[0]))]
[[1, 4, 7, 10], [2, 5, 8, 11],[3, 6, 9, 12]]
另一個更快和高級一些的方法,可以使用zip函數:
print map(list,
zip(*arr))
本節提供了關於矩陣轉置的兩個方法,一個比較清晰簡單,另一個比較快速但有些隱晦.
有時候,數據到來的時候使用錯誤的方式,比如,你使用微軟的ADO介面訪問資料庫,由於Python和MS在語言實現上的差別.
Getrows方法在Python中可能返回的是列值,和方法的名稱不同.本節給的出的方法就是這個問題常見的解決方案,一個更清晰,一個更快速.
在列表遞推式版本中,內層遞推式表示選則什麼(行),外層遞推式表示選擇者(列).這個過程完成後就實現了轉置.
在zip版本中,我們使用*arr語法將一維數組傳遞給zip做為參數,接著,zip返回一個元組做為結果.然後我們對每一個元組使用list方法,產生了列表的列表(即矩陣).因為我們沒有直接將zip的結果表示為list,
所以我們可以我們可以使用itertools.izip來稍微的提高效率(因為izip並沒有將數據在內存中組織為列表).
import itertools
print map(list,
itertools.izip(*arr))
但是,在特定的情況下,上面的方法對效率的微弱提升不能彌補對復雜度的增加.
關於*args和**kwds語法:
*args(實際上,*號後面跟著變數名)語法在Python中表示傳遞任意的位置變數,當你使用這個語法的時候(比如,你在定義函數時使用),Python將這個變數和一個元組綁定,並保留所有的位置信息,
而不是具體的變數.當你使用這個方法傳遞參數時,變數可以是任意的可迭代對象(其實可以是任何錶達式,只要返回值是迭代器).
**kwds語法在Python中用於接收命名參數.當你用這個方式傳遞參數時,Python將變數和一個dict綁定,保留所有命名參數,而不是具體的變數值.當你傳遞參數時,變數必須是dict類型(或者是返回值為dict類型的表達式).
如果你要轉置很大的數組,使用Numeric Python或其它第三方包,它們定義了很多方法,足夠讓你頭暈的.
相關說明:
zip(...)
zip(seq1 [,
seq2 [...]]) -> [(seq1[0], seq2[0] ...),
(...)]
Return a
list of tuples, where each tuple contains the i-th element
from each of
the argument sequences. The returned list is truncated
in length to
the length of the shortest argument sequence.
如果解決了您的問題請採納!
如果未解決請繼續追問
㈩ Python的5種高級用法
Lambda 函數
Python 函數一般使用 def a_function_name() 樣式來定義,但是對於 lambda 函數來說,我們其實根本沒為它命名。這是因為 lambda 函數的功能是執行某種簡單的表達式或運算,而無需完全定義函數。
Map 函數
Map() 是一種內置的 Python 函數,它可以將函數應用於各種數據結構中的元素,如列表或字典。對於這種運算來說,這是一種非常干凈而且可讀的執行方式。
Filter 函數
filter 內置函數與 map 函數非常相似,它也將函數應用於序列結構(列表、元組、字典)。二者的關鍵區別在於 filter() 將只返回應用函數返回 True 的元素。
Itertools 模塊
Python 的 Itertools 模塊是處理迭代器的工具集合。迭代器是一種可以在 for 循環語句(包括列表、元組和字典)中使用的數據類型。
使用 Itertools 模塊中的函數讓你可以執行很多迭代器操作,這些操作通常需要多行函數和復雜的列表理解。
Generator 函數
其實,Generator函數是一個類似於迭代器的函數,就是它也可以用在 for 循環語句中。這大大簡化了你的代碼,而且相比簡單的 for 循環,它節省了很多內存。
關於Python的5種高級用法,青藤小編就和您分享到這里了。如果您對python編程有濃厚的興趣,希望這篇文章可以為您提供幫助。如果您還想了解更多關於python編程的技巧及素材等內容,可以點擊本站的其他文章進行學習。