标签: nested-lists

如何在python中创建一些空的嵌套列表

我想要一个变量,它是一个嵌套的列表,列出了一些我可以在以后填写的空列表.看起来像:

my_variable=[[], [], [], []]
Run Code Online (Sandbox Code Playgroud)

但是,我事先并不知道我需要多少列表,只是在创建步骤,因此我需要一个变量a来确定它.我想简单my_variable=[[]]*a,但是创建了列表的副本,这不是我想要的.

我可以:

my_variable=[]  
for x in range(a):
   my_variable.append([])
Run Code Online (Sandbox Code Playgroud)

但我正在寻找一种更优雅的解决方案(最好是单线).有没有?

python list nested-lists

7
推荐指数
2
解决办法
4万
查看次数

在python的嵌套列表中将每个元素从字符串转换为int

我在 python 中有嵌套列表的数据,其中一部分看起来像:

data = [['214', '205', '0', '14', '710', '1813494849', '0'], ['214', '204', '0', '30', '710', '1813494856', '0'], ['214', '204', '0', '34', '710', '1813494863', '0'], ['213', '204', '0', '35', '710', '1813494870', '0'], ['213', '203', '0', '35', '710', '1813494877', '0']]
Run Code Online (Sandbox Code Playgroud)

使用几种方法转换数据时:

1.

 new_data_list = [[int(x) for x in list] for list in data]
Run Code Online (Sandbox Code Playgroud)
  1. list=[]
    for i in range(0,len(data)):
        list.append([])
        for j in range(0,len(data[i])):
            b=int(data[i][j])
            list[i].append(b)
    
    Run Code Online (Sandbox Code Playgroud)

    我收到错误消息:

ValueError:int() 的无效文字以 10 为基数:''

我的数据列表中没有非数字数据。但是标题可能有一些东西,比如一个空标题被视为非数字值,因为我已经从 csv 创建了一个数据列表。

我想知道一种有效的方法,可以将列表的每个元素转换为 int,同时保留数据多列表。

python nested-lists python-2.7 data-structures python-3.x

6
推荐指数
1
解决办法
7655
查看次数

R (purrr) 展平命名列表以列出并保留名称

也许我遗漏了一些明显的东西,但试图将 R 中的命名列表的命名列表(甚至可能更加嵌套)扁平化为最终一个平面列表。purrr并且rlist似乎有这方面的工具。我怎样才能实现子列表的名称成为扁平化结果列表的名称预加密,例如list1.blist.apurrr?我的实际列表嵌套得更深,具有不同数量的级别和不同级别上的重复名称。最后我执行purrr::map_df(final_list, bind_rows),这似乎删除了所有重复的名称(即使没有,我也不知道原始重复的名称来自哪个分支)。我可以做到这一点,rlist但我希望找到一个tidyverse解决方案(没有什么反对的rlist,但很多人已经tidyverse安装了)。

编辑:

另请注意,rlist::list.flatten()始终会删除除顶部之外的所有级别,同时一次purrr::flatten()删除一个级别,这有时可能是您所需要的。您可以根据需要经常嵌套 purrr::map(.x, .f = rlist::list.flatten) 来实现相同的目的,但它很麻烦而且不美观/可读。

alist <- list(list1 = list(a = 1, b = 2, blist = list(a = 3, b = 4)),
              list2 = list(a = 1, b = 2, blist = list(a = 3, b = 4)))
str(alist)

List of 2
 $ list1:List of 3
  ..$ a    : num 1 …
Run Code Online (Sandbox Code Playgroud)

r nested-lists flatten purrr

6
推荐指数
1
解决办法
2530
查看次数

R:在深度嵌套列表中按名称查找对象

问题

我认为这应该是一个常见问题,但我找不到解决方案:

让我们假设一个深度嵌套的列表,例如:

my_list <- list(
  "first_node" = list(
    "group_a" = list(
      "E001" = 1:5,
      "E002" = list(
        "F001" = 6:10,
        "F002" = 11:15
      )
    ),
    "group_b" = list(
      "XY01" = list(
        "Z1" = LETTERS[1:5],
        "Z2" = LETTERS[6:10],
        "Z3" = list(
          "ZZ1" = LETTERS[1],
          "ZZ2" = LETTERS[2],
          "ZZ3" = LETTERS[3]
        )
      ),
      "YZ" = LETTERS[11:15]
    ),
    "group_c" = list(
      "QQQQ" = list(
        "RRRR" = 200:300
      )
    )
  ),
  "second_node" = list(
    "group_d" = list(
      "L1" = 99:101,
      "L2" = 12 …
Run Code Online (Sandbox Code Playgroud)

r nested-lists

6
推荐指数
1
解决办法
1248
查看次数

在复杂列表中映射字典值的方法

输入

我有一个非常复杂的清单。

total_aug_rule_path_list = 
[[[[['#1_0_0', '#2_0_0', '#3_0_0'], ['#1_0_1', '#2_0_1', '#3_0_1']],
   [['#1_0_0', '#2_0_0', '#3_0_0'], ['#1_0_1', '#2_0_1', '#3_0_1']]],
  [[['#1_1_0', '#2_1_0', '#3_1_0', '#4_1_0'],
    ['#1_1_1', '#2_1_1', '#3_1_1', '#4_1_1']]]]]
Run Code Online (Sandbox Code Playgroud)

我有一本字典,其中列表的每个元素作为键。

sym2id_dict = {
 '#1_0_0': 1,
 '#1_0_1': 2,
 '#1_1_0': 3,
 '#1_1_1': 4,
 '#2_0_0': 5,
 '#2_0_1': 6,
 '#2_1_0': 7,
 '#2_1_1': 8,
 '#3_0_0': 9,
 '#3_0_1': 10,
 '#3_1_0': 11,
 '#3_1_1': 12,
 '#4_1_0': 13,
 '#4_1_1': 14,}
Run Code Online (Sandbox Code Playgroud)

我将把列表的每个元素映射到字典的值。

输出

[[[[[1, 5, 9], [2, 6, 10]], [[1, 5, 9], [2, 6, 10]]],
  [[[3, 7, 11, 13], [4, 8, 12, 14]]]]]
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法来尽可能少地使用 for …

python lambda dictionary list nested-lists

6
推荐指数
2
解决办法
119
查看次数

将特定于列表的截止值应用于嵌套列表中的各个向量

我有一个嵌套列表,have_list. 中心是一个包含四个整数向量的列表,a, b, c, d

对于abcd,每个都有唯一的cutoff值。我想找到当整数大于相关截止值时的第一个位置。

如果广告有相同的内容,我可以cutoff通过以下方式执行此操作:

rapply(have_list, function(x) which.max(x > cutoff), how = "list")
Run Code Online (Sandbox Code Playgroud)

我的具体问题是,如果可能的话,如何在没有for循环的情况下使用广告的相应截止值。我似乎在互联网上找不到任何东西,但如果我忽略了之前的问题,我深表歉意。

样本数据

cutoff <- c(a = 5, b = 17, c = 11, d = 7)

set.seed(05062020)
have_list <- list(Outer1 = list(a = sample(1:25, 10),
                                b = sample(1:25, 10),
                                c = sample(1:25, 10),
                                d = sample(1:25, 10)),
                  Outer2 = list(a = sample(1:25, …
Run Code Online (Sandbox Code Playgroud)

r list nested-lists

6
推荐指数
1
解决办法
195
查看次数

在没有 recursive=FALSE 的情况下展平列表的列表

我有一个列表,其中包含一些其他列表,但也包含非列表的其他对象,例如数据框。我想将其展平为单个列表,但通常的建议(请参阅如何展平列表列表?将列表列表转换为单个列表)将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)

r list nested-lists

6
推荐指数
1
解决办法
222
查看次数

如何绘制气泡并将其动画化为圆圈

我正在尝试制作一个 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)

python pygame list nested-lists

6
推荐指数
1
解决办法
466
查看次数

R 中子子列表元素的向量化替换

我有一个有点复杂的数据结构(嵌套列表)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]] …

loops r vectorization nested-lists

6
推荐指数
1
解决办法
140
查看次数

查找嵌套列表中 nan 元素的索引并将其删除

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 个列表:namesvalues。每个值都带有一个名称,即与Pat值相对应1Sam与值相对应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)

但是,上面没有考虑嵌套列表。

python list nested-lists

6
推荐指数
1
解决办法
119
查看次数