【群聊科普】PHP和Python是怎么对数组去重的?
在我的面向小白的PHP免费视频课(http://codeslator.edusoho.cn/my/course/3)中,我介绍了PHP数组,于是就有学过Python的朋友开始在群里讨论PHP和Python都是如何对数组去重的。
我在这里给大家简单分析一下,需要说明的人,我们都是以两个编程语言内置的函数举例的,而且大家可以分别前往在线的编程环境中练习,不必自己安装本地的编程环境。
先来看PHP:
<?php $words = array("China","US","Japan","US","Korea"); print_r(array_unique($words)); ?>
https://c.runoob.com/compile/1
把上面这段代码粘贴到上面的网址中,可以看出来,多出来的那个US被过滤掉了
然后再来看Python:
# -*- coding: UTF-8 -*- words = ["China","US","Japan","US","Korea"] new_words = list(set(words)) print new_words
https://c.runoob.com/compile/6
可以把上面的这段代码粘贴到上面的网址中,然后发现多余的US被过滤掉了,但同时单词的顺序也改变了
这种情况在翻译实践中很常见,比如你有一个术语库,术语库里有很多重复的术语,你不希望重复的术语也展示出来,这个时候就需要去重。
群友Edgar Z.说Python可以这样解决:if not in, append
他说的意思是:
在以下网址中输入以下代码:
https://c.runoob.com/compile/6
# -*- coding: UTF-8 -*- words = ["China","US","Japan","US","Korea"] new_words = [] for i in words: if i not in new_words: new_words.append(i) print new_words
意思是:
有两个盒子:一个盒子里装了很多单词,另外一个盒子里是空的。
从第一个盒子里一个个的取单词,每取一个,就看看这个单词有没有在第二个盒子里,如果没有的吧,就把这个单词放到第二个盒子里。
从而保证第二个盒子里肯定没有重复的单词。
这个是Python里的。初学者还没有学到判断和循环的时候可以不必在意这个例子,进度有些超前。
后面我会重点介绍判断和循环
如果用PHP来写的话就是这样:
<?php $words = array("China","US","Japan","US","Korea"); $new_words = array(); foreach($words as $i) { if(!in_array($i,$new_words)) { $new_words[] = $i; } } print_r($new_words); ?>
在这个网址中运行上述代码:
https://c.runoob.com/compile/1
截图:
要想理解这段代码需要知道的基础知识:
1) foreach循环
2) ! 叹号的作用
3) in_array()函数
4) 使用$new_words[] = 这种方式往数组里添加元素
没有找到相关结果
2 个回复
韩林涛 - 《译者编程入门指南》作者
群友张永旺还提供了一个使用Python去重的例子:
效果:
韩林涛 - 《译者编程入门指南》作者
关于Python的set()函数去重后顺序混乱的原因:
这个跟python的数据类型有关,在Python中有一种有序集合叫列表,英语叫list,比如:
words = ["China","US","Japan","US","Korea"]
这就是一个列表。
然后在Python中我们去做去重的时候一般会用到set函数,而在Python中还有一种集合叫无序集合,set就是一种无序集合。
在创建一个无序集合set的时候,需要输入一个list,所以才有这一行代码:
new_words = list(set(words))
其中的set(words)就是把有序集合变成了无序集合。
去重之后,我们再次把无序集合set变成list:
new_words = list(set(words))
然后输出。
这个时候你就发现最开始的那个列表里面已经不是最开始的顺序了。