Python同Java同Js语言语法区别之四判断字符串列表字典是否相等
字符串列表字典是否相等
- 前言
- Python
- 字符串or数字
- 列表
- 字典
- 总结
- Java
- 字符串
- 数组
- Map
- 总结
- JS
- 字符串
- 数组
- 对象
- 总结
前言
作为一枚测开工程师,需要的技能是全栈的,项目中,经常需要切换语言进行开发,语言用多了,难免会经常用混淆,故趁有空整理下这系列笔记“Python同Java同Js语言语法区别‘,希望对大家有用。
Python
字符串or数字
使用== 比较或者is进行比较
str1 = "@testxiaosheng"str4= "@test"+"xiaosheng"str5= "@testxiaosheng"str2 = "@test"str3 = str2 + "xiaosheng"# if str1 is str3: #判断是否同个对象if str1 == str3:print("一致")else:print("不一致")if str1 is str4:print("一致")else:print("不一致")if str1 is str5:print("一致")else:print("不一致")
思考下:为啥1跟5是一样的,但是1跟4却是不一样的
注意:“==” 比较的是值,is比较的是字符串的内存id。如果比较值的话,建议使用 “ == ”比较,而且不同的版本is判断还有区别。
比如在不同的版本下执行会有不同的结果。
str1 = "@testxiaosheng"
str3 ="@test"+"xiaosheng"
if str1 is str3:print("一致")
else:print("不一致")
问题解答:python中,字符串是不可变对象,拼接代表着重新创建一个新的字符串对象。但是如果只是申明同样的变量值,python会自动优化,所以申明同样的字符串变量值,对象的地址也是一样得。
额外注意的是python已经创建好了小整数对象池,[-5~256],都是固定的地址。如果数据超过这个范围就是不同的地址。比如两个遍历都赋值个257.结果这两个变量id就不同。
参考资料:https://blog.csdn.net/LANNY8588/article/details/103338961
列表
python 判断列表需要考虑列表中顺序不一样的问题。所以一般都需要排序后在进行比较,使用==或者eq函数都可以
list1 = ['b', 'dd', 'a', 'c']
list2 = ['a', 'b', 'c', 'dd']
#list2 = None
list3 = ['a', 'b', 'c', 'dd',['a','b']]
list4 = ['a', 'b', 'c', 'dd',['a','b']]
# 方法一:循环判断两个列表中的元素是否一样
# def a(list1,list2):
# list1.sort()
# list2.sort()
# if len(list1) == len(list2):
# for i in range(0, len(list1)):
# if list1[i] != list2[i]:
# return False
# return True
# else:
# return False
# print( a(list1,list2))# 方法二:直接使用operator工具eq函数或者==from operator import *
def b(list1,list2):list1.sort()list2.sort()return eq(list1, list2)# return list1==list2
print( b(list1,list2))# 多维数据同样可以使用eq或者==判断,不过不能使用sort排序,需要自己实现排序,此处请读者自己实现多维排序
def c(list1,list2):return eq(list1, list2)
print( c(list3,list4))
字典
字典使用==或者eq函数都可以判断,不过不需要像列表一样排序
dict1 = {"a":"2","c":"3"}
dict2 = {"c":"3","a":"2"}def d(dict1,dict2):print(id(dict1))print(id(dict2))return eq(dict1, dict1)# return dict1 == dict2
print( d(dict1,dict2))
注意如果是字典嵌套了字典,这个时候请使用"=="判断,eq判断不准
dict1 = {"a":"2","c":"3","bb":{"aa":3,"dd":111}}
dict2 = {"c":"3","a":"2","bb":{"aa":3,"dd":11}}def d(dict1,dict2):print(id(dict1))print(id(dict2))#return eq(dict1, dict1)return dict1 == dict2
print( d(dict1,dict2))
总结
python3中可以使用判断字符串,数字、列表(需排序)、字典(不需要排序)是否相等,且None对象也可以比对。“” 比较的是值,is比较的是字符串的内存id
Java
java判断是否相等,要注意空指针问题,null值不能放在最前面
字符串
可以使用equals判断,也可以使用commons工具类的StringUtils.isEquals 判断,建议使用isEquals ,不需要考虑空指针问题
安装commons工具类
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version><scope>test</scope></dependency>
import org.apache.commons.lang3.StringUtils;
public class Test {public static void main(String[] args) {String str1="fefe";String str2="fefe";String str3=null;System.out.println("str1 是否与 str2 相等?:" + str1.equals(str2));System.out.println("str1 是否与 str3 相等?:" + str1.equals(str3));System.out.println("str1 是否与 str2 相等?:" + StringUtils.equals(str1,str2));}
}
数组
可以使用equals判断,也可以使用commons工具类的ArrayUtils.isEquals 判断,但后者isEquals 已被官方弃用.
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.ArrayUtils;
public class Test {public static void main(String[] args) {List<String> arry =new ArrayList();arry.add("testxiaosheng");List<String> arry1 =new ArrayList();arry1.add("testxiaosheng");List<String> arry2 =new ArrayList();arry2.add("testxiaosheng");int[] array3 = { 1, 3, 5, 7, 9 };String aa="fefe";List arry5 = null;System.out.println("数组arr是否与数组arr1相等?:" + arry.equals(arry1));System.out.println("数组arr是否与数组arr1相等?:" + ArrayUtils.isEquals(arry,arry1));System.out.println("数组arr是否与数组arr2相等?:" + arry.equals(arry2));System.out.println("数组arr是否与数组arr3相等?:" + arry.equals(array3));System.out.println("数组arr是否与数组arr4相等?:" + arry.equals(aa));//System.out.println("数组arr是否与数组arr5相等?:" + arry5.equals(arry));空指针异常}
}
但equals只针对顺序一致的数组,如果数据不一致,得先排序然后再比对。可以直接使用集合工具类isEqualCollection,自动帮你排好序比较
List<String> arry =new ArrayList();arry.add("12");arry.add("testxiaosheng");List<String> arry1 =new ArrayList();arry1.add("testxiaosheng");arry1.add("12");
// arry.sort(Comparator.reverseOrder()); 升序
// arry1.sort(Comparator.reverseOrder());System.out.println("数组arr是否与数组arr1相等?:" + arry.equals(arry1));System.out.println("arry是否与arry1相等?:" + CollectionUtils.isEqualCollection(arry,arry1));
Map
直接使用equals判断
import java.util.HashMap;
import java.util.Map;
public class Test {public static void main(String[] args) {Map<String,String> m1= new HashMap<String,String>();m1.put("aa","123");m1.put("testxiaosheng","666");Map<String,String> m2= new HashMap<String,String>();m2.put("testxiaosheng","666");m2.put("aa","123");System.out.println("m1是否与m2相等?:" + m1.equals(m2));}
}
总结
java中不管是字符串还是数组还是map都可以使用equal关键字判断,不同类型也可以 判断,除了null空指针,注意null必须放在判断最右边 ,要不然会报错。equals 判断数组需要排序,map不需要,使用工具类 CollectionUtils判断,则不需要排序。
请注意equals 与” == “的区别,Java中”==“判断的是内存地址,而python中是判断的内容。python none对象可以放在左边,而java不可以。这两类语法写多了也是很容易混淆的
JS
字符串
JS中判断字符相等一般使用===严格等于,会先判断类型,在判断值,==会自动转换类型比较
var str1 = 123456 ; // 整型
var str2 = "123456" ; // 字符串
console.log(str1==str2);
console.log(str1===str2);
数组
JS中判断数组不能使用===判断,也没有内置得方法可以判断,需要自己写
使用tostrig判断,这种方法有坑,就是数组中含有字符串数字,会认为是一样的
var a = ['1', '3', '2'];
var b = ['3', '1', 2];
var c = a.length === b.length && a.sort().toString() === b.sort().toString();
console.log(c); // true
同样要排好序才能 比价
var arrayEquals = function(array1,array2) {array1.sort();array2sort();
return array1.length==array2.length && array1.every(function(v,i) { return v === array2[i]});
}
console.log(arrayEquals(a,b))
对象
同样不能用===判断,判断起来也是非常麻烦,此处是网友写的代码,仅供参考
let obj1 = {a: 1,b: {c: 2}
}
let obj2 = {b: {c: 3},a: 1
}
function isObjectValueEqual(a, b) {// 判断两个对象是否指向同一内存,指向同一内存返回 trueif (a === b) return true // 获取两个对象键值数组let aProps = Object.getOwnPropertyNames(a)let bProps = Object.getOwnPropertyNames(b)// 判断两个对象键值数组长度是否一致,不一致返回 falseif (aProps.length !== bProps.length) return false // 遍历对象的键值for (let prop in a) {// 判断 a 的键值,在 b 中是否存在,不存在,返回 falseif (b.hasOwnProperty(prop)) {// 判断 a 的键值是否为对象,是则递归,不是对象直接判断键值是否相等,不相等返回 falseif (typeof a[prop] === 'object') {if (!isObjectValueEqual(a[prop], b[prop])) return false} else if (a[prop] !== b[prop]) {return false}} else {return false}}return true
}
console.log(isObjectValueEqual(obj1, obj2)) // false
总结
JS判断数组以及对象,都比较麻烦,所以这些逻辑尽量后端能做就后端做。
Python同Java同Js语言语法区别之四判断字符串列表字典是否相等相关推荐
- python和c语言和java有什么区别_python和c的区别 python、java和c语言的区别?
Python和c语言有什么区别如果我的坚强任性,会不小心伤害了你.你能不能温柔提醒,我虽然心太急,更害怕错过你 前者为 脚本语言 需要虚拟机 解释执行 ..一般情况下 不能生成exe(要使用打包工具) ...
- python和java和c语言的区别-python c 和java的区别有哪些
一.python python比较容易学习,语法很简单,融入了很多现代编程语言的特性.python的库非常丰富,可以迅速地开发程序,无论是网站还是小游戏都非常方便.不过,python的脚本的运行效率较 ...
- python和java和c语言的区别,python和java哪个更值得学
java和python是什么? java和python都是一种面向对象的语言.Java是一种面向对象的语言,有着和C/C++近似的语法.它是动态链接,允许新的代码在运行时加载与运行,而不是动态类型的. ...
- 浅谈python与JAVA和C语言的区别
转自:微点阅读 https://www.weidianyuedu.com 对于接触过编程语言的人来说,如果要快速上手python,首先要了解python和其他编程语言的主要区别在哪?下边勇哥主要以使 ...
- python和java和c语言的区别-python和c语言的主要区别总结
Python可以说是目前最火的语言之一了,人工智能的兴起让Python一夜之间变得家喻户晓,Python号称目前最最简单易学的语言,现在有不少高校开始将Python作为大一新生的入门语言.本萌新也刚开 ...
- java汉字编码和c语言,java与c语言的区别 java和c语言有什么不同
目前在语言编辑的过程当中我们接触的就是c语言和java编程,可是c语言与java究竟有什么区别呢?学习编程语言之前,我们就来了解一下这两者之间的具体区别在哪吧. java与c语言的区别--java和c ...
- JAVA与C语言的区别之我见
JAVA与C语言的区别之我见 1. 语言背景: C语言是在单机时代应用非常广泛, c语言是基于汇编语言和高级语言间的一种中级语言,它融合了高级语言的简单易用和汇编语言的执行效率.而Java是在 ...
- Java和C语言的区别在哪里?
标题Java和C语言的区别 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称.由James Gosling和同事们共同研发,并在1 ...
- JAVA和C语言的区别
JAVA和C语言的区别 (2010-02-02 00:00:00) 转载▼ 标签: java和c 杂谈 分类: 日志 JAVA和C语言都是面向对象语言.也就是说,它们都能够实现面向对象思想(封装,继承 ...
最新文章
- 设置VSCode Git签出分支快捷键Alt+G
- 算法----------同构字符串(Java版本)
- 我的第一个SharePoint2013 App
- android 图片在哪里设置时间,android 按时间显示图片
- 【Linux】33. shell脚本 递归删除空目录
- Android 关闭软键盘
- 王道408数据结构——第五章 树与二叉树
- 创建react应用程序_如何将React应用程序部署到Netlify
- Structural Deep Clustering Network 基于GNN的深度聚类算法 WWW2020
- java触发器如何创建表_Java中 创建Oracle触发器的问题。
- 指针函数 (C语言)
- Soda PDF Desktop Pro(电脑版pdf编辑器软件)官方正式版V12.0.283.16292 | 电脑pdf编辑器哪个好用?
- 用HFFS实例讲解多频天线设计
- 多智能体强化学习:合作关系设定下的多智能体强化学习
- 跨界融合,共创智能汽车研发新生态(技术大会诚邀您的莅临)
- 编写Java程序,做一个MPG和L/100KM的转换器
- java程序的执行流程
- JWT 做 token 签发
- FL Studio教程之Fruity Wrapper插件讲解
- [SpringCould篇]之断路器(Hystrix)
热门文章
- win10系统打不开计算机管理,win10任务管理器打不开如何处理_win10任务管理器打不开的解决办法...
- JS实现Excel导入以及table导出为Excel
- 商场弱电监控系统招标方案
- linux系统界面图形化操作步骤
- 刘强东突然扔了颗重磅炸弹:京东地下胶囊物流系统取得重大突破!
- flv格式详解+实例剖析
- 闲置手机改摩托车车机导航,支持短时停车休眠,长时停车断电,点火开机(大屏平板也可参照此方案用于汽车)
- 数字电路----加法器的实现
- (十二)【数电】(组合逻辑电路)加法器
- 更改电脑ip地址的方法