def flattenList(toFlatten):
final=[]
for el in toFlatten:
if isinstance(el, list):
final.extend(flattenList(el))
else:
final.append(el)
return final
Run Code Online (Sandbox Code Playgroud)
当我不知道列表的嵌套程度时,这是我能想到的唯一方法.
我正在写一个简单的字符串解析器,它允许类似regexp的量词.输入字符串可能如下所示:
s = "x y{1,2} z"
Run Code Online (Sandbox Code Playgroud)
我的解析器函数将此字符串转换为元组列表:
list_of_tuples = [("x", 1, 1), ("y", 1, 2), ("z", 1, 1)]
Run Code Online (Sandbox Code Playgroud)
现在,棘手的一点是我需要一个由量化指定的所有有效组合的列表.组合都必须具有相同数量的元素,并且该值None
用于填充.对于给定的示例,预期输出为
[["x", "y", None, "z"], ["x", "y", "y", "z"]]
Run Code Online (Sandbox Code Playgroud)
我确实有一个可行的解决方案,但我对它并不满意:它使用两个嵌套for
循环,我发现代码有点模糊,所以有一些尴尬和笨拙的事情:
import itertools
def permute_input(lot):
outer = []
# is there something that replaces these nested loops?
for val, start, end in lot:
inner = []
# For each tuple, create a list of constant length
# Each element contains a different number of
# repetitions of the value …
Run Code Online (Sandbox Code Playgroud) 给定一个数据帧df
,(现实生活是+1000行df).元素ColB
是列表列表.
ColA ColB
0 'A' [['a','b','c'],['d','e','f']]
1 'B' [['f','g','h'],['i','j','k']]
2 'A' [['l','m','n'],['o','p','q']]
Run Code Online (Sandbox Code Playgroud)
如何ColC
使用不同列中的元素有效地创建一个字符串,如下所示:
ColC
'A>+a b:c,+d e:f'
'B>+f g:h,+i j:k'
'A>+l m:n,+o p:q'
Run Code Online (Sandbox Code Playgroud)
我尝试了df.apply
这些方法,灵感来自于:
df['ColC'] = df.apply(lambda x:'%s>' % (x['ColA']),axis=1)
Run Code Online (Sandbox Code Playgroud)
这适用于字符串的前2个元素.其余的都很难过.
获取列表中的项目数非常容易len(list)
,但是假设我有一个矩阵,例如:
[[1,2,3],[1,2,3]]
是否有返回 6 的 Pythonic 方法?或者我必须迭代。
我有一个对象列表,其中对象可以是列表或标量.我想要一个只有标量的扁平列表.例如:
L = [35,53,[525,6743],64,63,[743,754,757]]
outputList = [35,53,525,6743,64,63,743,754,757]
Run Code Online (Sandbox Code Playgroud)
PS此问题的答案不适用于异构列表.在Python中展平浅层列表
>>> a=["a"]*4
>>> a
['a', 'a', 'a', 'a']
>>> b=range(4)
>>> b
[0, 1, 2, 3]
>>> c = [range(4,8), range(9,13), range(14,18), range(19,23)]
>>> c
[[4, 5, 6, 7], [9, 10, 11, 12], [14, 15, 16, 17], [19, 20, 21, 22]]
>>>
>>> result = map(lambda x,y:[x,y],a,b)
>>> map(lambda x,y:x.extend(y),result,c)
>>> result = map(tuple, result)
>>> result # desired output:
[('a', 0, 4, 5, 6, 7), ('a', 1, 9, 10, 11, 12), ('a', 2, 14, 15, 16, 17), ('a', 3, …
Run Code Online (Sandbox Code Playgroud) 我有以下列表:
a = [[1, [0], [0], [1, [0]]], [1, [0], [0], [1, [0]]], [1, [0], [0]]]
Run Code Online (Sandbox Code Playgroud)
我想取所有整数并用它们制作一个字符串:
b = '1001010010100'
Run Code Online (Sandbox Code Playgroud)
有什么方法可以做到这一点吗?先感谢您!
比方说,我有一个包含许多子元素的结构,其中一些子结构是结构:
v = [1, 2, 3, [4, (5, 6)]]
Run Code Online (Sandbox Code Playgroud)
如何将这些解包为一系列仅包含结构内容而不包含结构的名称?
尝试使用星号表达式a, b, c, d, e, f = v
引发一段ValueError
时间会为名称分配结构.我怎样才能解压缩它们以获得:
print(a, b, c, d, e, f)
Run Code Online (Sandbox Code Playgroud)
打印:
1 2 3 4 5 6
Run Code Online (Sandbox Code Playgroud) 我有一个看起来像这样的元组列表:
[('a', 'b'), ('c', 'd'), (('e', 'f'), ('h', 'i'))]
Run Code Online (Sandbox Code Playgroud)
我想把它变成这个:
[('a', 'b'), ('c', 'd'), ('e', 'f'), ('h', 'i')]
Run Code Online (Sandbox Code Playgroud)
最恐怖的方式是什么?
我有一个嵌套列表a = [1, 2, [3, 4], 5]
,我想应用一个函数来将每个数字提高到 2 的幂。结果将是这样的:
a = [1, 4, [9, 16], 25]
Run Code Online (Sandbox Code Playgroud)
我试过了,a = [list(map(lambda x : x * x, x)) for x in a]
但它给出了这个错误
a = [1, 4, [9, 16], 25]
Run Code Online (Sandbox Code Playgroud)
我们如何解决这个问题?如何在嵌套列表上应用函数?