当前位置:首页 » 编程语言 » pythonitertools

pythonitertools

发布时间: 2022-05-24 05:51:56

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编程的技巧及素材等内容,可以点击本站的其他文章进行学习。

热点内容
oppor9怎么压缩图片 发布:2025-02-13 10:06:13 浏览:948
云服务器app哪个最好 发布:2025-02-13 09:47:53 浏览:1000
php计算天数 发布:2025-02-13 09:34:04 浏览:869
如何查计算机配置 发布:2025-02-13 09:34:03 浏览:682
ubi源码 发布:2025-02-13 09:28:23 浏览:699
做亚马逊不用云服务器行吗 发布:2025-02-13 09:13:51 浏览:876
路由器翻过来哪里是密码 发布:2025-02-13 09:12:23 浏览:850
c语言宏变长 发布:2025-02-13 09:11:43 浏览:907
redis高速缓存 发布:2025-02-13 08:51:14 浏览:259
访问缅甸公报 发布:2025-02-13 08:49:51 浏览:900