我有一个看起来像这样的字符串数组
['a', 'b', 'c.1', 'c.2', 'c.3', 'c.4', 'd.1', 'd.2', 'd.3']
我希望将其分解为类似
的内容[['a', 'b', 'c.1'], ['a', 'b', 'c.2'], ['a', 'b', 'c.3'],
['a', 'b', 'd.1'], ['a', 'b', 'd.2'], ['a', 'b', 'd.3'],
['a', 'b', 'd.4']]
我该怎么做呢?我的想法是在itertools中使用groupby 得到类似
的东西['a', 'b', ['c.1', 'c.2', 'c.3'], ['d.1', 'd.2', 'd.3', 'd.4']]
然后可能像
result = []
for elem in nestedList:
if isinstance(elem, list):
temp = []
for elem in nestedList:
if not isinstance(elem, list):
temp.append(elem):
temp.append(elem)
result.append(temp)
为了做到这一点,我需要访问groupby中的下一个元素
(Something like lambda x: '.' not in x and nextelement.split('.')[0] != x)
我该怎么做?
答案 0 :(得分:3)
你不需要itertools。
您可以简单地使用列表推导来过滤带有'.'
的字符串,并在另一个列表理解中再次组合它们:
data = ['a', 'b', 'c.1', 'c.2', 'c.3', 'c.4', 'd.1', 'd.2', 'd.3']
lone_letters = [x for x in data if '.' not in x]
combined_letters = [x for x in data if '.' in x]
print([lone_letters + [x] for x in combined_letters])
# [['a', 'b', 'c.1'], ['a', 'b', 'c.2'], ['a', 'b', 'c.3'], ['a', 'b', 'c.4'], ['a', 'b', 'd.1'], ['a', 'b', 'd.2'], ['a', 'b', 'd.3']]
答案 1 :(得分:1)
最简单的方法:
l = ['a', 'b', 'c.1', 'c.2', 'c.3', 'c.4', 'd.1', 'd.2', 'd.3']
result = [l[:2] + [i] for i in l[2:]]
print(result)
输出:
[['a', 'b', 'c.1'], ['a', 'b', 'c.2'], ['a', 'b', 'c.3'], ['a', 'b', 'c.4'], ['a', 'b', 'd.1'], ['a', 'b', 'd.2'], ['a', 'b', 'd.3']]
答案 2 :(得分:1)
以下是一般方法的互动演示。 首先定义输入列表:
>>> l = ["a", "b", "c.1", "c.2", "c.3", "c.4", "d.1", "d.2", "d.3"]
>>> l
['a', 'b', 'c.1', 'c.2', 'c.3', 'c.4', 'd.1', 'd.2', 'd.3']
收集公共前缀元素:
>>> p = [e for e in l if "." not in e]
>>> p
['a', 'b']
计算其余元素:
>>> r = [e for e in l if e not in p]
>>> r
['c.1', 'c.2', 'c.3', 'c.4', 'd.1', 'd.2', 'd.3']
计算前缀的乘积与其余元素:
>>> from itertools import product
>>> [x[0] + list(x)[1:] for x in product([p],r)]
[['a', 'b', 'c.1'], ['a', 'b', 'c.2'], ['a', 'b', 'c.3'], ['a', 'b', 'c.4'],
['a', 'b', 'd.1'], ['a', 'b', 'd.2'], ['a', 'b', 'd.3']]
答案 3 :(得分:0)
像这样使用list comprehension:
my_list = ['a', 'b', 'c.1', 'c.2', 'c.3', 'c.4', 'd.1', 'd.2', 'd.3']
res = [[my_list[0], my_list[1], item] for item in my_list[2:]]
<强>输出:强>
>>> from pprint import pprint
>>>
>>> pprint(res)
[['a', 'b', 'c.1'],
['a', 'b', 'c.2'],
['a', 'b', 'c.3'],
['a', 'b', 'c.4'],
['a', 'b', 'd.1'],
['a', 'b', 'd.2'],
['a', 'b', 'd.3']]