都用来判断两个变量是否相等,区别在:
is : 判断两个变量的引用是否相等。 值相等,引用不一定相同.
==: 判断两个变量的值是否相等。 如果引用相同,则值一定相等.
a = 1 b = 1 print(id(a)) # 1575434496 print(id(b)) # 1575434496 print(a is b) # True print(a == b) # True a = ‘hello world‘ b = ‘hello world‘ print(a is b) # True print(a == b) # True # 只有数值和字符串类型时,a is b 才是True # 而对于列表(list)、元组(tuple)、字典(dict)、集合(set) a is b 为False a = [1, 2, 3] b = [1, 2, 3] print(id(a)) # 55002536 print(id(b)) # 55003696 print(a is b) # False print(a == b) # True a = {‘name‘: ‘tom‘, ‘age‘: 19} b = {‘name‘: ‘tom‘, ‘age‘: 19} print(a is b) # False print(a == b) # True
实际上在python中,
对于 -5 ~ 256 之间的整数(包含-5 和 256)都会初始化在内存中,所以当给变量赋值时,如果在这个区间中,他们都是指向同一个内存地址。
如果一旦超过这个范围,或者非整数,则会分配新的内存空间。则会返回False。
在PyCharm中,因为对解释器做了优化,所以测试的时候哪怕超过这个范围a is b 也是返回True。
所以我们只有在终端测试才能显示测试结果
##############################################终端测试##################################################
Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:06:47) [MSC v.1914 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> a = -5 >>> b = -5 >>> print(a is b) True >>> a = -6 >>> b = -6 >>> print(a is b) False >>> a = 256 >>> b = 256 >>> print(a is b) True >>> a = 266 >>> b = 266 >>> print(a is b) False >>> a = 6.666 >>> b = 6.666 >>> print(a is b) False
Python解释器有一个intern(字符串驻留)的机制.
意思是同一个字符串只在常量池中保存一份,所以创建两个一样的字符串,他们都是指向了常量池中相同的地址。
但是要注意的是,当字符串中有空格时,则不会触发intern机制(在Pycharm中优化了解释器,仍然会触发).
>>> a = ‘helloworld‘ >>> b = ‘hello‘ + ‘world‘ >>> print(a is b) True >>> a = ‘hello world‘ >>> b = ‘hello world‘ >>> print(a is b) False
题目:
给定一个无序列表,要求按照奇数在前且正序排列,偶数在后,倒序排列。
如:[5, 1, 8, 9, 2, 3, 6, 5, 7]。
排序之后为:[1, 3, 5, 5, 7, 9, 8, 6, 2]
解一:第一种思路,可以将题目中的列表,按照奇数、偶数分为两个列表。分别对其就行正序和倒序排列。在将其进行组合。
# 初始列表 arr = [5, 1, 8, 9, 2, 3, 6, 5, 7] # 定义一个偶数列表 a = [] # 定义一个奇数列表 b = [] for i in arr: # 偶数放入a列表中 if i % 2 == 0: a.append(i) continue # 奇数放入b列表中 b.append(i) # 偶数列表倒序排列 a.sort(reverse=True) # 奇数sort默认正序 b.sort() b = b + a # [1, 3, 5, 5, 7, 9, 8, 6, 2] print(b)
解二:将列表先倒序排列,然后再遍历,当遇到奇数,将其从列表中取出并插入到第一位。
# 初始列表 arr = [5, 1, 8, 9, 2, 3, 6, 5, 7] # 倒序排列 arr.sort(reverse=True) # [9, 8, 7, 6, 5, 5, 3, 2, 1] for i in range(len(arr)): if arr[i] % 2 != 0: # 遇到偶数时,将其从列表中移除(pop),并将其放入第一位 arr.insert(0, arr.pop(i)) print(arr) # [1, 3, 5, 5, 7, 9, 8, 6, 2]
解三:利用sorted函数和lambda进行自定义排序。当为偶数时,返回比原始列表最大的数还要打的数即可。当为奇数是,返回本身
arr = [5, 1, 8, 9, 2, 3, 6, 5, 7] # [1, 3, 5, 5, 7, 9, 8, 2, 6] print(sorted(arr, key=lambda x: x % 2 == 0 and 20 - x or x))
印度数学家卡普列加(Dattaraya Ramchandra Kaprekar, 1905 - 1986)在一次旅行中,遇到猛烈的暴风雨,他看到路边一块牌子被劈成了两半,一半上写着30,另一半写着25。这时,他忽然发现30+25=55,55^2=3025,把劈成两半的数加起来,再平方,正好是原来的数字。这种数字叫做雷劈数 或者 卡普利加数。(来自百度百科)
最小的雷劈数为81: 8+1=9 9² = 81
既然能一分为二说明这个数字的长度肯定是偶数,知道这一点就很方便的能算出100万以内的雷劈数了。
方式一:
for i in range(1000000): i = str(i) # 过滤数字长度不是偶数 if len(i) % 2 != 0: continue # a / b分别为两份数据 a = 0 b = 0 # 如果两位数直接截取 if len(i) == 2: a = int(i[0]) b = int(i[1]) else: # 分片截取 a = int(i[:int(len(i)/2)]) b = int(i[int(len(i)/2):]) # 得出结果 if (a + b) ** 2 == int(i): print(i)
方式二:
for i in range(1000000): a = len(str(i)) if a % 2 != 0: continue else: # 通过求整 求余的方式进行截取 b = 10 ** (a // 2) x = int(i / b) y = i % b if (x + y) ** 2 == i: print(i)
任意给定一个字符串,要求:
将小写的字母转换成大写
将大写的字母转换成小写
将数字转换成9减去这个数的值
# 方法一 def transform(string): new_str = ‘‘ for i in string: if i.isdigit(): new_str += str(9 - int(i)) else: new_str += i.swapcase() return new_str # 方法二 def transform2(string): new_str = ‘‘ for i in string: if i.isdigit(): new_str += str(9 - int(i)) elif i.isupper(): new_str += i.lower() elif i.islower(): new_str += i.upper() else: new_str += i return new_str if __name__ == ‘__main__‘: string = ‘ava1241@o3#1-1231;.,,^$d‘ print(transform(string)) # AVA8758@O6#8-8768;.,,^$D print(transform2(string)) # AVA8758@O6#8-8768;.,,^$D
##########方法一可以写的更pythonic一点############ string = ‘ava1241@o3#1-1231;.,,^$d‘ result = ‘‘.join([str(9 - int(i)) if i.isdigit() else i.swapcase() for i in string]) print(result) # AVA8758@O6#8-8768;.,,^$D
isdigit() : 用于检测字符串是否由纯数字组成,如果只要包含一个非数字就返回False。
a = ‘12315‘ print(a.isdigit()) # True # 包含字符a b = ‘12345a‘ print(b.isdigit()) # False # 包含符号% c = ‘123%15‘ print(c.isdigit()) # False
isalpha() : 检测字符串是否只有字母组成
a = ‘abcd‘ print(a.isalpha()) # True b = ‘abcd123‘ print(b.isalpha()) # False c = ‘abc$d‘ print(c.isalpha()) # False
swapcase() : 用于对字符串大小写字母的转换
a = ‘aBcD%Fe‘ print(a.swapcase()) # AbCd%fE
# 将字母全都转换成大写 print(a.upper()) # ABCDEFG # 将字母全都转换成小写 print(a.lower()) # abcdefg # 判断是否是大写 False print(‘aaa‘.isupper()) # 判断是否是小写 # True print(‘bbb‘.islower())
原文:https://www.cnblogs.com/jjb1997/p/11410049.html