字符串列表字典是否相等

  • 前言
    • 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语言语法区别之四判断字符串列表字典是否相等相关推荐

  1. python和c语言和java有什么区别_python和c的区别 python、java和c语言的区别?

    Python和c语言有什么区别如果我的坚强任性,会不小心伤害了你.你能不能温柔提醒,我虽然心太急,更害怕错过你 前者为 脚本语言 需要虚拟机 解释执行 ..一般情况下 不能生成exe(要使用打包工具) ...

  2. python和java和c语言的区别-python c 和java的区别有哪些

    一.python python比较容易学习,语法很简单,融入了很多现代编程语言的特性.python的库非常丰富,可以迅速地开发程序,无论是网站还是小游戏都非常方便.不过,python的脚本的运行效率较 ...

  3. python和java和c语言的区别,python和java哪个更值得学

    java和python是什么? java和python都是一种面向对象的语言.Java是一种面向对象的语言,有着和C/C++近似的语法.它是动态链接,允许新的代码在运行时加载与运行,而不是动态类型的. ...

  4. 浅谈python与JAVA和C语言的区别

    转自:微点阅读  https://www.weidianyuedu.com 对于接触过编程语言的人来说,如果要快速上手python,首先要了解python和其他编程语言的主要区别在哪?下边勇哥主要以使 ...

  5. python和java和c语言的区别-python和c语言的主要区别总结

    Python可以说是目前最火的语言之一了,人工智能的兴起让Python一夜之间变得家喻户晓,Python号称目前最最简单易学的语言,现在有不少高校开始将Python作为大一新生的入门语言.本萌新也刚开 ...

  6. java汉字编码和c语言,java与c语言的区别 java和c语言有什么不同

    目前在语言编辑的过程当中我们接触的就是c语言和java编程,可是c语言与java究竟有什么区别呢?学习编程语言之前,我们就来了解一下这两者之间的具体区别在哪吧. java与c语言的区别--java和c ...

  7. JAVA与C语言的区别之我见

    JAVA与C语言的区别之我见 1.     语言背景: C语言是在单机时代应用非常广泛, c语言是基于汇编语言和高级语言间的一种中级语言,它融合了高级语言的简单易用和汇编语言的执行效率.而Java是在 ...

  8. Java和C语言的区别在哪里?

    标题Java和C语言的区别 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称.由James Gosling和同事们共同研发,并在1 ...

  9. JAVA和C语言的区别

    JAVA和C语言的区别 (2010-02-02 00:00:00) 转载▼ 标签: java和c 杂谈 分类: 日志 JAVA和C语言都是面向对象语言.也就是说,它们都能够实现面向对象思想(封装,继承 ...

最新文章

  1. 设置VSCode Git签出分支快捷键Alt+G
  2. 算法----------同构字符串(Java版本)
  3. 我的第一个SharePoint2013 App
  4. android 图片在哪里设置时间,android 按时间显示图片
  5. 【Linux】33. shell脚本 递归删除空目录
  6. Android 关闭软键盘
  7. 王道408数据结构——第五章 树与二叉树
  8. 创建react应用程序_如何将React应用程序部署到Netlify
  9. Structural Deep Clustering Network 基于GNN的深度聚类算法 WWW2020
  10. java触发器如何创建表_Java中 创建Oracle触发器的问题。
  11. 指针函数 (C语言)
  12. Soda PDF Desktop Pro(电脑版pdf编辑器软件)官方正式版V12.0.283.16292 | 电脑pdf编辑器哪个好用?
  13. 用HFFS实例讲解多频天线设计
  14. 多智能体强化学习:合作关系设定下的多智能体强化学习
  15. 跨界融合,共创智能汽车研发新生态(技术大会诚邀您的莅临)
  16. 编写Java程序,做一个MPG和L/100KM的转换器
  17. java程序的执行流程
  18. JWT 做 token 签发
  19. FL Studio教程之Fruity Wrapper插件讲解
  20. [SpringCould篇]之断路器(Hystrix)

热门文章

  1. win10系统打不开计算机管理,win10任务管理器打不开如何处理_win10任务管理器打不开的解决办法...
  2. JS实现Excel导入以及table导出为Excel
  3. 商场弱电监控系统招标方案
  4. linux系统界面图形化操作步骤
  5. 刘强东突然扔了颗重磅炸弹:京东地下胶囊物流系统取得重大突破!
  6. flv格式详解+实例剖析
  7. 闲置手机改摩托车车机导航,支持短时停车休眠,长时停车断电,点火开机(大屏平板也可参照此方案用于汽车)
  8. 数字电路----加法器的实现
  9. (十二)【数电】(组合逻辑电路)加法器
  10. 更改电脑ip地址的方法