我刚刚阅读了Mark Lutz的"学习Python",并且遇到了这个代码示例:
>>> L = ['grail'] >>> L.append(L) >>> L ['grail', [...]]
它被确定为循环数据结构.
所以我很想知道,这是我的问题:
似乎有点混乱,我认为这源于非常简短的代码示例...这里有几行使用相同的对象L
>>> L[0] 'grail' >>> L[1][0] 'grail' >>> L[1][1][0] 'grail'
Charlie Mart.. 18
许多事.循环缓冲区,例如:你有一些带有正面和背面的数据集合,但是有任意数量的节点,而最后一个节点的"下一个"项目应该会带你回到第一个.
图结构通常是循环的; acyclicity是一个特例.例如,考虑一个包含旅行商问题中所有城市和道路的图表.
好的,这是一个特殊的例子.我在科罗拉多州建立了一系列城镇:
V=["Boulder", "Denver", "Colorado Springs", "Pueblo", "Limon"]
然后,我建立了一对连接它们的道路.
E=[["Boulder", "Denver"], ["Denver", "Colorado Springs"], ["Colorado Springs", "Pueblo"], ["Denver", "Limon"], ["Colorado Springs", "Limon"]]
这有一堆循环.例如,您可以从科罗拉多斯普林斯,利蒙,丹佛,然后返回科罗拉多斯普林斯.
如果您创建的数据结构包含V中的所有城市和E中的所有道路,那么这就是图形数据结构.该图表将具有周期.
许多事.循环缓冲区,例如:你有一些带有正面和背面的数据集合,但是有任意数量的节点,而最后一个节点的"下一个"项目应该会带你回到第一个.
图结构通常是循环的; acyclicity是一个特例.例如,考虑一个包含旅行商问题中所有城市和道路的图表.
好的,这是一个特殊的例子.我在科罗拉多州建立了一系列城镇:
V=["Boulder", "Denver", "Colorado Springs", "Pueblo", "Limon"]
然后,我建立了一对连接它们的道路.
E=[["Boulder", "Denver"], ["Denver", "Colorado Springs"], ["Colorado Springs", "Pueblo"], ["Denver", "Limon"], ["Colorado Springs", "Limon"]]
这有一堆循环.例如,您可以从科罗拉多斯普林斯,利蒙,丹佛,然后返回科罗拉多斯普林斯.
如果您创建的数据结构包含V中的所有城市和E中的所有道路,那么这就是图形数据结构.该图表将具有周期.
我最近创建了一个循环数据结构来表示八个基本和有序方向.它对每个方向都有用,可以了解它的邻居.例如,Direction.North知道Direction.NorthEast和Direction.NorthWest是它的邻居.
这是循环的,因为每个neighor知道它的邻居,直到它全速摆动(" - >"表示顺时针):
北 - >东北 - >东 - >东南 - >南 - >西南 - >西 - >西北 - >北 - > ...
注意我们回到了北方.
这允许我做这样的事情(在C#中):
public class Direction { ... public IEnumerableWithTwoNeighbors { get { yield return this; yield return this.CounterClockwise; yield return this.Clockwise; } } } ... public void TryToMove (Direction dir) { dir = dir.WithTwoNeighbors.Where (d => CanMove (d)).First () Move (dir); }
事实证明这非常方便,并且使许多事情变得复杂得多.