python - 即使我创建了两个单独的列表,为什么 if 条件为真

标签 python list if-statement boolean

even = [10, 4, 6, 8]
another_even = list(even)
print(another_even is even)
if another_even == even:
    another_even.sort( reverse=True )
    print(even)
else:
    print("Yay")

输出: 错误

[10, 4, 6, 8]

尽管我已经创建了两个单独的列表,但为什么 if 条件为真。

最佳答案

even = [10, 4, 6, 8]
another_even = list(even)

even 是一个列表 another_even 是您使用 even 中的元素构建的不同列表。

注意:不同。它们是两个不同的对象。

这就是为什么:

print(another_even is even)

打印False。这是因为 evenanother_even 不是同一个对象。

如果你这样做了:

another_even = even

你会得到 True

但是现在你用以下方法测试相等性:

if another_even == even:
    another_even.sort( reverse=True )
    print(even)
else:
    print("Yay")

并且 == 会将 even 中的元素与 another_even 中的 elements 进行比较。因为列表和元素的长度相等,所以比较结果为 True 并且此代码执行:

    another_even.sort( reverse=True )
    print(even)

您可以将 == 比较视为执行其他代码:

result = True
for x, y in zip(even, another_even):
    if x != y:
        result = False
        break

元素一对一比较,如果一对不相等,结果将为 False。在您的情况下,所有元素都是相等的。

注意:您可以检查对象 evenanother_even 是否不同:

print(id(even))
print(id(another_even))

并且输出会不同,因此 even 的 False 是 another_even

关于python - 即使我创建了两个单独的列表,为什么 if 条件为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48357213/

相关文章:

python - 无法从字节转换为 int

连接时 Python openSSL 服务器崩溃 - SSL 出现奇怪错误

c++ - 为什么我在读取二进制文本时会得到 unicodeand 大数字?

python - 从 2D python 列表中提取某些元素?

postgresql - SELECT 语句中的 SQL 语句 If 语句

Canvas 图形上的 Python 3 tkinter : How to use . after()?

html - 如何在 html 列表中的文本后面添加箭头?

if-statement - GW-BASIC 中的嵌套 IF...THEN...ELSE

Python - 使用 FOR 循环迭代 pandas DataFrame 时,使用 IF 语句查找字符串中的子字符串

带有生成器/可迭代/迭代器的 Python 随机样本