我想知道是否有一条快捷方式可以在Python列表中列出一个简单的列表.
我可以在for循环中做到这一点,但也许有一些很酷的"单行"?我用reduce尝试了,但是我收到了一个错误.
码
l = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
reduce(lambda x, y: x.extend(y), l)
Run Code Online (Sandbox Code Playgroud)
错误信息
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
AttributeError: 'NoneType' object has no attribute 'extend'
Run Code Online (Sandbox Code Playgroud) 假设我想要a,b和c中的2个字母的所有排列.
我可以:
my @perm = <a b c>.combinations(2)».permutations;
say @perm;
# [((a b) (b a)) ((a c) (c a)) ((b c) (c b))]
Run Code Online (Sandbox Code Playgroud)
这很接近,但不完全是我需要的.我如何"扁平化"这样以便得到:
# [(a b) (b a) (a c) (c a) (b c) (c b)]
Run Code Online (Sandbox Code Playgroud)
?
我想知道在 Raku 中有一种简洁的方法来处理嵌套数组(数组数组)并将结果展平吗?当转换平面数组>>.很方便时,但如果我想返回数组并且结果应该是平面的,那么 Raku 中可以使用什么构造?
grammar g {
rule port { <pnamelist> + %% ","}
token pnamelist { <id> + }
token id { \w }
}
class a {
method port ($/) { make $<pnamelist>>>.made }
method pnamelist ($/) { make $<id>>>.made }
method id ($/ ) { make $/.Str }
}
my $r = g.parse("ab,cd", :rule('port'), :actions(a) ).made;
say $r; # [[a b] [c d]]
Run Code Online (Sandbox Code Playgroud)
上面的代码片段输出[[a b] [c d]],但是我真正想要的是[a b c d]. …
我已经搜索了SO如何压缩列表列表(例如:在Python中列出列表中的列表)但是我找到的解决方案都没有将列表列表的列表展平为仅列表名单.
我有:
my_list = [ [ [1,2,3],[4,5] ], [ [9],[8,9,10],[3,4,6] ], [ [1] ] ]
Run Code Online (Sandbox Code Playgroud)
我想要:
my_list = [ [1,2,3,4,5], [9,8,9,10,3,4,6], [1] ]
Run Code Online (Sandbox Code Playgroud)
该解决方案也适用于浮动列表.有什么建议?
我有一个元组列表列表
A= [ [(1,2,3),(4,5,6)], [(7,8,9),(8,7,6),(5,4,3)],[(2,1,0),(1,3,5)] ]
Run Code Online (Sandbox Code Playgroud)
外部列表可以具有任意数量的内部列表,内部列表可以具有任意数量的元组,元组总是具有3个整数.
我想生成元组的所有组合,每个列表中有一个:
[(1,2,3),(7,8,9),(2,1,0)]
[(1,2,3),(7,8,9),(1,3,5)]
[(1,2,3),(8,7,6),(2,1,0)]
...
[(4,5,6),(5,4,3),(1,3,5)]
Run Code Online (Sandbox Code Playgroud)
一个简单的方法是使用类似的函数itertools.poduct()
但必须像这样调用它
itertools.product([(1,2,3),(4,5,6)], [(7,8,9),(8,7,6),(5,4,3)],[(2,1,0),(1,3,5)])
Run Code Online (Sandbox Code Playgroud)
即删除外部列表.我不知道该怎么做.有没有更好的方法来生成元组的所有组合?