python中对list去重的多种方法,针对自动化运维工具ssh

从JavaScript 数组去重看包容性难点,及品质优化(摘自玉伯博客)

python中对list去重的各个办法,pythonlist

明天超越二个难题,在同事随便的唤醒下,用了 itertools.groupby
那个函数。然则那些东西最后仍然不算上。

难题就是对二个list中的音讯id进行去重,去重以往要有限支撑顺序不改变。

直观方法

最简便的思路正是:

复制代码 代码如下:

ids = [1,2,3,3,4,2,3,4,5,6,1]
news_ids = []
for id in ids:
    if id not in news_ids:
        news_ids.append(id)

print news_ids

诸有此类也是有效,不过看起来远远不够爽。

用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的原理能够看这里:

网络老铁补充:用reduce

网民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]: reduce(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] 。

思路其实正是先把ids变为[[], 1,4,3,……]
,然后在使用reduce的特色。reduce解释参看这里:

本着自动化运行工具ssh/telnet/ftp等一声令下设计的三种远程交互作用格局,sshtelnet

第一种:

ftp -v -n 192.168.0.1 21 <<!
user ftp ftp123
bay
!

第二种:

{
   echo -e "\n"
   echo -e "ifconfig"      
}| telnet 0 1234 

第三种:

ssh 192.168.0.2 '/etc/init.d/httpd start'

首先种方法最麻烦,相比较赏识第二种,第二种办法最简便,你认为啊?

假使感到好就珍藏吧! 若是还应该有别的措施,请留言告知自身,多谢。

 

第一种: ftp -v -n 192.168.0.1 21 !user ftp ftp123bay! 第二种: { echo
-e…

发表评论

电子邮件地址不会被公开。 必填项已用*标注

标签:
网站地图xml地图