我是Common Lisp和函数式编程的新手,但我在C,C++,C#,Java等语言方面有很多经验.我在列表中找到最嵌套的列表时遇到了麻烦.我的输入是这样的:
(0 1 (2 3) 4 (5 (6 (7) 8)) 9)
Run Code Online (Sandbox Code Playgroud)
我想获得这个列表中最嵌套的列表,在这种情况下是
(7)
Run Code Online (Sandbox Code Playgroud)
我确实有一个想法,我可以以某种方式压扁列表,直到只剩下一个子列表.为了说明我的意思,这里有几个步骤:
第1步 - 输入:
(0 1 (2 3) 4 (5 (6 (7) 8)) 9)
Run Code Online (Sandbox Code Playgroud)
第2步 - 在"第一级"上展平:
(0 1 2 3 4 5 (6 (7) 8) 9)
Run Code Online (Sandbox Code Playgroud)
第3步 - 在"第二级"上展平:
(0 1 2 3 4 5 6 (7) 8 9)
Run Code Online (Sandbox Code Playgroud)
现在只剩下一个嵌套列表,这意味着这是最嵌套的列表.但是我发现这里有两个或更多这样的列表会出现问题.请分享您对此的看法.
我在Common Lisp中将此过程变为现实时遇到了问题,所以我会感谢一些正确方向的指针,可能是一些示例代码等等.这是一项家庭作业,所以我真的不希望有一个完整的解决方案,但如果有人指出可能是一个更简单,更好的解决方案及其实施,那将会很高兴.
说我有这个清单: (a b ((c)) (d + e) ((e + f)) (g) () h)
如何获得以下列表(最好带有功能):(a b c (d + e) (e + f) g h)
换一种说法:
如果嵌套列表只有一个元素,则将其简化为元素.((c))在上面的例子中,这简化为c.也((e + f))变成了(e + f).
如果嵌套列表包含多个元素,则它保持不变.这(d + e)仍然(d + e)如上例所示.
如果嵌套列表为null,则只删除它.
最后,我不确定在这种情况下flatten一词是否适用.我希望我的问题很明确.如果没有,请告诉我.
提前致谢!
我正在使用Python进行网络流量监控项目.不熟悉Python,所以我在这里寻求帮助.
简而言之,我正在检查流量和流量,我这样写:
for iter in ('in','out'):
netdata = myhttp()
print data
Run Code Online (Sandbox Code Playgroud)
netdata是一个由嵌套列表组成的列表,其格式如下:
[ [t1,f1], [t2,f2], ...]
Run Code Online (Sandbox Code Playgroud)
这里t代表的是时刻,f是流动.但是我只想在这个时刻保留这些f进行内外,我想知道如何获得有效的代码.
经过一些搜索,我认为我需要使用创建流量列表(2个元素),然后使用zip函数同时迭代这两个列表,但是我很难写出正确的列表.由于我的netdata是一个很长的列表,效率也非常重要.
如果有任何令人困惑的事情,请告诉我,我会尽力澄清.感谢帮助
我知道我可以使用以下方法将列表拆分为相同大小的子列表:
segment = len(list)//k
sub_lists = [list[i:i+segment] for i in range(0, len(list), segment)]
Run Code Online (Sandbox Code Playgroud)
但是,我不确定如何将长度为k ^ m的列表拆分为子列表,然后是其他子列表,直到每个子列表的长度为1.
例如:
k = 2
list = [1, 2, 3, 4, 5, 6, 7, 8]
list = [[1, 2, 3, 4], [5, 6, 7, 8]]
list = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
list = [[[[1], [2]], [[3], [4]]], [[[5], [6]], [[7], [8]]]]
Run Code Online (Sandbox Code Playgroud)
每当我试图循环这个时,我就会被打结,是否有捷径?
我试图描绘(x,y)在哪里y = [[1,2,3],[4,5,6],[7,8,9]].
说,len(x) = len(y[1]) = len(y[2]).. y的长度由用户输入决定.我想在同一个图中绘制y的多个图,即(x, y[1],y[2],y[3],...).当我尝试使用循环时,它说dimension error.
我也尝试过: plt.plot(x,y[i] for i in range(1,len(y)))
我该如何策划?请帮忙.
for i in range(1,len(y)):
plt.plot(x,y[i],label = 'id %s'%i)
plt.legend()
plt.show()
Run Code Online (Sandbox Code Playgroud) 如何在Python2中处理可变长度子列表解包?
在Python3中,如果我有可变的子列表长度,我可以使用这个成语:
>>> x = [(1, 2,3,4,5), (2, 4,6), (3, 5,6,7,8,9)]
>>> for i, *item in x:
... print (item)
...
[2, 3, 4, 5]
[4, 6]
[5, 6, 7, 8, 9]
Run Code Online (Sandbox Code Playgroud)
在Python2中,它是一个无效的语法:
>>> x = [(1, 2,3,4,5), (2, 4,6), (3, 5,6,7,8,9)]
>>> for i, *item in x:
File "<stdin>", line 1
for i, *item in x:
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
顺便说一句,这个问题与解释最大大小为n的可变长度列表的惯用法有一点不同,其中解决方案需要固定长度的知识.
这个问题特定于解决Python2中的问题.
我有一个列表,其中包含一些其他列表,但也包含非列表的其他对象,例如数据框。我想将其展平为单个列表,但通常的建议(请参阅如何展平列表列表?或将列表列表转换为单个列表)将unlist(..., recursive = FALSE)不起作用,因为它data.frame也可以在 上运行。
> d <- list(list(a = 1, b = 2), c = data.frame(1:4))
> d
[[1]]
[[1]]$a
[1] 1
[[1]]$b
[1] 2
$c
X1.4
1 1
2 2
3 3
4 4
> unlist(d, recursive = FALSE)
$a
[1] 1
$b
[1] 2
$c.X1.4
[1] 1 2 3 4
Run Code Online (Sandbox Code Playgroud)
预期的结果是$c保留相同的data.frame结构。
到目前为止,我唯一的解决方案是在unlisting 之前向所有非列表对象添加一个额外的列表层,但这是一个非常不优雅的解决方案。
> unlist(lapply(d, function(x) if(!inherits(x, "list")) list(x) else x), recursive = …Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个 python 程序来绘制一条线,然后使用 pygame 将其变成带有动画的圆圈,但我什至还没有完成绘制线的代码。我注意到python正在更改列表中的错误或两个项目,其中包含用户按下左键单击时的起点,存储为第一个项目,用户鼠标的当前点存储为第二个项目。
这通常是我想要它做的: https: //youtu.be/vlqZ0LubXCA
以下是包含和不包含更新第二项的行的结果:
和:
没有:
正如您所看到的或在描述中阅读的,这条线是覆盖前一帧所必需的。
我用箭头标记了改变结果的行:
import pygame, PIL, random
print('\n')
#data
bubbles = []
color_options = [[87, 184, 222]]
pressed = False
released = False
bubline_start = []
background = [50, 25, 25]
size = [500, 500]
#pygame
display = pygame.display.set_mode(size)
pygame.init()
#functions
def new_bub_color():
color_index = random.randint(0, len(color_options)-1)
lvl = random.randrange(85, 115)
bub_color = []
for val in color_options[color_index]:
bub_color.append(val*(lvl/100))
return bub_color
def bubble_line():
global display, pressed, bubline_start, released, bubbles, color_options …Run Code Online (Sandbox Code Playgroud) 我有一个有点复杂的数据结构(嵌套列表)y,定义为:
x <- list(
list(1, "a", 2, "b", 0.1),
list(3, "c", 4, "d", 0.2),
list(5, "e", 6, "f", 0.3)
)
y <- rep(list(x), 10)
Run Code Online (Sandbox Code Playgroud)
我还有一个数据框df,定义为:
df <- data.frame(
x1 = c( 0.33, 1.67, -0.62, -0.56, 0.17, 0.73, 0.59, 0.56, -0.22, 1.49),
x2 = c(-0.82, 1.22, 0.65, 0.54, -2.26, 1.21, -0.44, -0.92, -0.56, 0.50),
x3 = c(-0.16, 0.49, -0.82, -0.71, 0.13, 1.22, 1.23, -0.01, -1.11, 0.97)
)
Run Code Online (Sandbox Code Playgroud)
其中列名并不重要。
我想将所有和替换y[[i]][[j]][[5]]为。我的 Python/Julia 大脑在循环中工作得最好,因此我通过循环,然后循环 的元素(每个 的副本)来完成此操作,如下所示:df[[i, j]] …
names=[['Pat','Sam', np.nan, 'Tom', ''], ["Angela", np.nan, "James", ".", "Jackie"]]
values=[[1, 9, 1, 2, 1], [1, 3, 1, 5, 10]]
Run Code Online (Sandbox Code Playgroud)
我有 2 个列表:names和values。每个值都带有一个名称,即与Pat值相对应1,Sam与值相对应9。
我想删除nanfromnames和相应的值values。
也就是说,我想要一个new_names如下所示的列表:
[['Pat','Sam', 'Tom', ''], ["Angela", "James", ".", "Jackie"]]
Run Code Online (Sandbox Code Playgroud)
和一个new_values如下所示的列表:
[[1, 9, 2, 1], [1, 1, 5, 10]]
Run Code Online (Sandbox Code Playgroud)
我的尝试是首先找到这些nan条目的索引:
all_nan_idx = []
for idx, name in enumerate(names):
if pd.isnull(name):
all_nan_idx.append(idx)
Run Code Online (Sandbox Code Playgroud)
但是,上面没有考虑嵌套列表。
nested-lists ×10
list ×6
python ×6
r ×2
common-lisp ×1
flatten ×1
lisp ×1
loops ×1
matplotlib ×1
pygame ×1
python-2.7 ×1
recursion ×1
scheme ×1