出现整数时,从numpy数组创建嵌套列表

时间:2018-01-19 21:06:54

标签: python arrays list data-structures conditional-statements

我有一个类型字符串的一维数组,如下所示:

["1", "---", "some text", "---", "more text", "---", "2", "---", "even more text", "---", "3", "---", "you guessed it", "---"]

我想要一个具有这种结构的列表:

[
   ["1", "---", "some text", "---", "more text", "---"], 
   ["2", "---", "even more text", "---"], 
   ["3", "---", "you guessed it", "---"]
]

如果我的符号错了,请道歉 - 再次,我对Python中的数据结构很新。如您所见,每个新的嵌套列表都是从数组中接近数字时开始的。

2 个答案:

答案 0 :(得分:2)

正如其他人所指出的那样,您发布了一个c数组样式的所需输出,它在Python中转换为一组无效的集合。相反,您可以使用itertools.groupby创建嵌套列表:

import itertools
s = ["1", "---", "some text", "---", "more text", "---", "2", "---", "even more text", "---", "3", "---", "you guessed it", "---"]
new_s = [list(b) for a, b in itertools.groupby(s, key=lambda x:x.isdigit())]
final_data = [new_s[i]+new_s[i+1] for i in range(0, len(new_s), 2)]

输出:

[
 ['1', '---', 'some text', '---', 'more text', '---'], 
 ['2', '---', 'even more text', '---'], 
 ['3', '---', 'you guessed it', '---']
]

答案 1 :(得分:2)

假设“数组”是指listtuple

In [22]: data = ("1",
    ...: "---",
    ...: "some text",
    ...: "---",
    ...: "more text",
    ...: "---",
    ...: "2",
    ...: "---",
    ...: "even more text",
    ...: "---",
    ...: "3",
    ...: "---",
    ...: "you guessed it",
    ...: "---")

然后你的逻辑应该非常简单:

In [23]: final = []

In [24]: for x in data:
    ...:     if x.isdigit():
    ...:         sub = [x]
    ...:         final.append(sub)
    ...:     else:
    ...:         sub.append(x)
    ...:

In [25]: final
Out[25]:
[['1', '---', 'some text', '---', 'more text', '---'],
 ['2', '---', 'even more text', '---'],
 ['3', '---', 'you guessed it', '---']]

In [26]: