码迷,mamicode.com
首页 > 编程语言 > 详细

python随笔

时间:2019-08-26 00:04:03      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:edit   赋值   sha   的区别   解释器   定义排序   intel   区别   edits   

python中 is 和 == 的区别

都用来判断两个变量是否相等,区别在:

  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))

 

python随笔

标签:edit   赋值   sha   的区别   解释器   定义排序   intel   区别   edits   

原文地址:https://www.cnblogs.com/jjb1997/p/11410049.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!