我有一个类型字符串的一维数组,如下所示:
["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中的数据结构很新。如您所见,每个新的嵌套列表都是从数组中接近数字时开始的。
答案 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)
假设“数组”是指list
或tuple
:
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]: