在闲置浏览命名空间的同时,我注意到一个名为" Ellipsis " 的奇怪物体,它似乎没有或做任何特殊的事情,但它是一个全局可用的内置.
在搜索之后,我发现它被Numpy和Scipy用于切片语法的一些模糊变体......但几乎没有别的.
这个对象是否专门用于支持Numpy + Scipy?省略号是否具有任何通用含义或用途?
D:\workspace\numpy>python
Python 2.4.4 (#71, Oct 18 2006, 08:34:43) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> Ellipsis
Ellipsis
Run Code Online (Sandbox Code Playgroud) 我最近在尝试使用.sort()
和对自引用列表进行排序时遇到了一个奇怪的差异sorted()
。我希望有人能对此有所了解。有问题的代码如下:
lst = [1, 2, 3]
lst[0] = lst
lst[1] = lst
lst[2] = lst
print(lst)
print(sorted(lst))
lst.sort()
print(lst)
Run Code Online (Sandbox Code Playgroud)
上面的代码产生以下输出:
[[...], [...], [...]]
[[[...], [...], [...]], [[...], [...], [...]], [[...], [...], [...]]]
[[...], [...], [...]]
Run Code Online (Sandbox Code Playgroud)
它的输出print(sorted(lst))
让我感到困惑。想知道是否是某种形式的递归导致了它?
可以在Python中创建无限的嵌套列表.这很清楚,虽然不受欢迎,但绝对没用,这是一个众所周知的事实.
>>> a = [0]
>>> a[0] = a
>>> a
[[...]]
>>> a[0] == a
True
Run Code Online (Sandbox Code Playgroud)
我的问题是,这里发生了什么:
>>> a = [0]
>>> b = [0]
>>> a[0], b[0] = b, a
>>> a
[[[...]]]
>>> b
[[[...]]]
>>> a == b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
RuntimeError: maximum recursion depth exceeded in cmp
>>> a[0] == b
True
>>> a[0][0] == b
Traceback (most recent call last):
File "<stdin>", line 1, in <module> …
Run Code Online (Sandbox Code Playgroud) 如果我运行以下代码
data = [[1,2],[3,4],[5,6]]
for x in data:
print(x[0])
for x[0] in data:
print(x)
Run Code Online (Sandbox Code Playgroud)
我得到以下输出
1
3
5
[[1, 2], 6]
[[3, 4], 6]
[[...], 6]
Run Code Online (Sandbox Code Playgroud)
我最终得到一个列表[[...], 6]
,但是这个[...]
列表是什么?
它不正常的行为,因为调用y = [[...], 6]
然后将下面的语句显示[...]
为0
>>> print(y)
[[Ellipsis], 6]
>>> print(y[0])
[0]
Run Code Online (Sandbox Code Playgroud)
但是,当我在顶部运行代码并键入以下语句时,结果没有意义:
>>> print(x)
[[...], 6]
>>> print(x[0])
[[...], 6]
>>> print(x[0][0])
[[...], 6]
>>> print(x[0][0][0])
[[...], 6]
Run Code Online (Sandbox Code Playgroud)
然而不知何故,这两个结果都是6
>>> print(x[1])
6
>>> print(x[0][1])
6
Run Code Online (Sandbox Code Playgroud)
回顾一下这个问题:这怎么可能,[...]
代表什么,以及顶部的for循环如何创建这样的列表?
我刚刚获得了一些python脚本的奇怪输出:
[[(7, 6), (6, 4), (7, 2)], [...], [...], [...], [(7, 6), (8, 4), (7, 2)], [...], [...], [...], [...], [...], [...], [...]]
Run Code Online (Sandbox Code Playgroud)
输出应该是元组列表的列表.但我不知道为什么会出现.
这是什么意思?
我不认为它是一个空列表,因为空列表是[].这些可能是重复的吗?
我发现了一个关于列表的"有趣"问题.
list1 = [1, 2, 3]
list1.insert(3, list1)
print(list1)
[1, 2, 3, [...]]
POP = list1.pop()
print(POP)
[1, 2, 3]
list1.extend(['a', 'b', 'c'])
print(POP)
[1, 2, 3, 'a', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)
这些以交互模式显示.当然,我知道"insert"只能在列表中插入一个对象.然而,当我插入list1
到list1
.它表明[...]
,这是什么意思?而且,POP = list1.pop()
不是说pop不能只返回最终对象吗?扩展列表后,最终对象应为'c'.为什么它会返回整体list1
但没有[...]
?
编辑:我原来的例子里不小心.当我A
向自己添加列表时,而不是当我向其自身添加包含列表的列表时,行为不会发生.请参阅下面的更正示例.A
A
我试图理解省略号列表([...]
在列表引用自身时出现和出现的列表)如何在Python 2中工作.
特别是,我想知道为什么,如果A
是a list
,A = A + A
似乎对A += A
(和A.append(A)
)的工作方式不同.
也就是说,你为什么得到:
>>> a = [1, 2]
>>> a = a + [a]
>>> a
[1, 2, [1, 2]]
Run Code Online (Sandbox Code Playgroud)
与
>>> a = [1, 2]
>>> a += [a]
>>> a
[1, 2, [...]]
Run Code Online (Sandbox Code Playgroud)
(注意,a.append(a)
就像后者一样,对我来说似乎有用.)
如果它有助于澄清事情,那么关于这个省略号列表现象的任何其他更一般的信息也将非常受欢迎.
我来过这个问题.码:
>>> values = [0, 1, 2]
>>> values[1] = values
>>> values
[0, [...], 2]
Run Code Online (Sandbox Code Playgroud)
我期望的结果是:
[0, [0, 1, 2], 2]
Run Code Online (Sandbox Code Playgroud)
这是python列表的无限分配吗?幕后的是什么?
谢谢.
我正在尝试在战舰板上装船.下面代码中的函数应该使用许多船只和一个板(数组数组)作为参数.当我在终端运行时,我得到:
[[1, [...]], [1, [...]], [2, [...]]]
Run Code Online (Sandbox Code Playgroud)
这是什么意思?如何在此输出中用0到2的随机整数替换[...]?
from random import randint
def print_board(board):
for row in board:
print " ".join(row)
def random_row(board):
return randint(0, len(board) - 1)
def random_col(board):
return randint(0, len(board[0]) - 1)
def set_the_ships(num_ships,board):
ship_list = []
for i in range(num_ships):
ship_row = random_row(board)
ship_col = random_col(board)
position = [ship_row,ship_list]
for j in range(i - 1):
while (position[0] == ship_list[j][0] and position[1] == ship_list[j][1]):
ship_row = random_row(board)
ship_col = random_col(board)
position = [ship_row,ship_list]
ship_list.append(position)
return ship_list
print …
Run Code Online (Sandbox Code Playgroud) 假设我在Python中创建一个递归嵌套列表,如下所示:
>>> a = [1,2]
>>> a += [a]
Run Code Online (Sandbox Code Playgroud)
一些属性:
len(a)
是 3
a[2] is a
是 True
打印时会发生什么a
?这出现:
>>> a
[1, 2, [...]]
Run Code Online (Sandbox Code Playgroud)
同理:
>>> a[2]
[1, 2, [...]]
Run Code Online (Sandbox Code Playgroud)
为什么?Python如何"知道"列表中的递归?如何检测到递归?