我想要一个变量,它是一个嵌套的列表,列出了一些我可以在以后填写的空列表.看起来像:
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 中有嵌套列表的数据,其中一部分看起来像:
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)
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,同时保留数据多列表。
也许我遗漏了一些明显的东西,但试图将 R 中的命名列表的命名列表(甚至可能更加嵌套)扁平化为最终一个平面列表。purrr并且rlist似乎有这方面的工具。我怎样才能实现子列表的名称成为扁平化结果列表的名称预加密,例如list1.blist.a在purrr?我的实际列表嵌套得更深,具有不同数量的级别和不同级别上的重复名称。最后我执行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) 我认为这应该是一个常见问题,但我找不到解决方案:
让我们假设一个深度嵌套的列表,例如:
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) 输入
我有一个非常复杂的清单。
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 …
我有一个嵌套列表,have_list. 中心是一个包含四个整数向量的列表,a, b, c, d。
对于a、b、c、d,每个都有唯一的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) 我有一个列表,其中包含一些其他列表,但也包含非列表的其他对象,例如数据框。我想将其展平为单个列表,但通常的建议(请参阅如何展平列表列表?或将列表列表转换为单个列表)将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 ×5
r ×5
dictionary ×1
flatten ×1
lambda ×1
loops ×1
purrr ×1
pygame ×1
python-2.7 ×1
python-3.x ×1