这是关于为一组并行数据生成图像或任何其他表示的问题.是不是绘图或GUI编程,而是计算位置.首先,我将解释一下我现在站在哪里,第二个图像和示例显示我的问题.
exampleOne-Easy http://www.wargsang.de/text3935.png
我有一维物体,但它们通过将它们放在平行的"线"上来对齐.让我们将这个具有"持续时间"作为时间单位的一维对象称为"事件".这些事件有一个没有任何反应的变体,没有数据但持续时间的对象; 一个"差距" - 对象.
因此,我们得到了一个由事件和间隙组成的模拟对象的时间表,这很容易作为三个对象列表来处理.可视化也很简单:循环遍历列表并根据其持续时间绘制每个对象.
class Event():
def __init__(self, duration, displacement = 0): #displacement is explained in the second example and the core problem of this question
self.duration = duration
self.displacement = displacement
#additional data
def self.draw(self, start_coordinate):
"""draw duration * 10 pixels in black"""
#drawing code using start_coordinate to place the drawn object. see example graphic
return duration * 10
class Gap():
def __init__(self, duration, displacement = 0):
self.duration = duration
self.displacement = displacement
#no …
Run Code Online (Sandbox Code Playgroud) 尽管我在python中写道,但我认为抽象概念对我和其他人来说更有趣.如果你喜欢,那么伪代码请:)
我有一个列表,其中包含我的一个课程中的项目.让我们在这里用字符串和数字来做,这没关系.它嵌套到任何深度.(它实际上不是一个列表,而是一个基于列表的容器类.)
例如: [1,2,3,['a','b','c'] 4 ['d','e',[100,200,300]] 5,['a','b' ,'c'],6]
请注意,['a','b','c']实际上都是同一个容器.如果你改变一个,你改变另一个.可以编辑容器和项目,插入项目和最重要的容器可以多次使用.为了避免冗余,它不可能使列表变平(我认为!),因为你无法在一个容器中插入项目,它会自动出现在所有其他容器中.
问题:针对前端(刚刚与蟒蛇"CMD"命令行模块),我想通过这个结构与游标,它总是指向当前项目,以便它可以读取或编辑导航.光标可以左右(用户的观点),并且应该表现得像列表不是嵌套列表而是扁平列表.
对于人类而言,这非常容易.你只是假装在上面的这个列表中,子列表不存在,只是从左到右依次走.
例如,如果您在上面的列表中处于"3"的位置并向右移动,则将"a"作为下一项,然后是"b","c",然后是"4"等.或者如果您从右边开始"300"你接下来会得到"5".
向后:如果你从"6"左转,那么下一个是'c'.如果你从"5"左转到它的"300".
那么我原则上该如何做呢?我有一种方法,但它的错误,问题已经很长了,我担心大多数人都不会读它:(.我可以稍后发布.
PS即使它很难抗拒:这个问题的答案不是"你为什么要这样做,为什么要用这种方式组织你的数据,为什么不先把我的想法变得平淡无味" ?问题正是我在这里所描述的,没有别的.数据是由问题的本质构成的.
我想编写像硬件屏幕 OSD(屏幕显示)一样运行的应用程序(或使用现有的应用程序,这会更方便),只是不需要输入。
也就是说:图形输出(例如来自 Qt 或 Gtk 等 GUI 工具包)被放置在甚至位于全屏窗口(如 Firefox F11 模式或全屏模式下的视频播放器)上方的层上。这也包括鼠标光标“上方”,因此从技术上和图形上讲,鼠标光标将移动到该小部件下方。我不知道 SDL 或 OpenGL 的真正全屏应用程序,但这不是要求。如果您也知道这一点,请将其包含在您的答案中。
现实世界的应用程序是只读覆盖层,例如一个小网络摄像头窗口、一个电视台(例如徽标)或预制注释。总而言之,这一切都是为了现场演示、流媒体和录制截屏视频和教程,并进行最少的后期处理。
我自己的黑客攻击,不成功的实验至少表明,从 WM 控件中删除这个窗口(我通过选择 GTK 弹出对话框而不是真正的主窗口来做到这一点)可以让您定位在绝对坐标中,并且它会忽略诸如虚拟桌面和工作区,这很好,因此您可以在这些工作区之间切换,并且覆盖/HUD 将保持在原位。
当然,这不能在与硬件屏幕具有相同 Z 值(顶部/底部窗口)的软件中完成。因此,从技术上讲,我所说的是在所有其他窗口之上,但在屏幕保护程序或锁屏层之下。
+1 互联网,用于链接到文档并提供正确的关键字。
+2 互联网用于工作代码示例、语言、GUI 工具包等并不重要。
假设这个清单
nestedList = ["a", "b", [1, 2, 3], "c",[4, 5, 6, [100, 200, 300]], "d"]
Run Code Online (Sandbox Code Playgroud)
我有一个函数返回任意深度的嵌套列表的位置列表. 示例:
[2, 1] -> "2"
[5] -> "d"
[4, 3, 2] -> "300"
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,一开始并不清楚有多少层嵌套.
附加问题 对于列表修改,我想使用[:]或[4:]或[0:1]表示法.
对于人类来说,它很容易做到:只需添加尽可能多的索引位置即可.
nestedList[2][1]
nestedList[5]
nestedList[4][3][2]
nestedList[4][1:] = NewItem + nestedList[4][1:] #insert item
nestedList[2][1] = [] #remove item
Run Code Online (Sandbox Code Playgroud)
然而,这种方法不会导致任何地方,因为我必须将字符串附加在一起并稍后评估它们.显而易见的废话:)
处理具有未知数量的索引位置的嵌套列表的最佳方法是什么,并且仍然具有像普通列表一样处理它的功能(读取,修改,插入,删除)
我希望有一个答案.
PS列表必须保持嵌套.展平不是一种选择.
python ×3
nested-lists ×2
algorithm ×1
cursor ×1
desktop ×1
eval ×1
linux ×1
navigation ×1
overlay ×1
python-3.x ×1
recursion ×1
xorg ×1