我想在Python中组合两个列表,按以下方式创建一个列表:
a = [1,1,1,2,2,2,3,3,3,3]
b= ["Sun", "is", "bright", "June","and" ,"July", "Sara", "goes", "to", "school"]
和输出:
c= ["Sun is bright", "June and July", "Sara goes to school"]
答案 0 :(得分:4)
使用for
循环首先将单词累积到某种映射数据结构中,然后使用列表推导来创建所需的输出。
>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> for k, v in zip(a, b):
... d[k].append(v)
...
>>> [' '.join(d[k]) for k in sorted(d)]
['Sun is bright', 'June and July', 'Sara goes to school']
答案 1 :(得分:3)
假设:
a和b具有相同的长度
a已订购
以1开头
尝试:
a = [1,1,1,2,2,2,3,3,3,3]
b= ["Sun", "is", "bright", "June","and" ,"July", "Sara", "goes", "to", "school"]
c = []
for i in range(len(a)):
if len(c)<a[i]:
c.append(b[i])
else:
c[a[i]-1] += " " + b[i]
print c
答案 2 :(得分:1)
这对你有用。您可以创建列表列表并始终附加到最后一个inner_list。然后,使用join
将所有列表合并为一个字符串。
a = [1,1,1,2,2,2,3,3,3,3]
b= ["Sun", "is", "bright", "June","and" ,"July", "Sara", "goes", "to", "school"]
final_list = []
for i,word in zip(a,b):
if i-1 >= len(final_list):
final_list.append([])
final_list[-1].append(word)
combined = [" ".join(inner_list) for inner_list in final_list]
#['Sun is bright', 'June and July', 'Sara goes to school']
答案 3 :(得分:1)
另一个想法,使用collections.Counter
:
from collections import Counter
c = Counter(a) # Counter({3: 4, 1: 3, 2: 3})
i = 0
res = []
for j in sorted(c):
res.append(' '.join(b[i:c[j]+i]))
i += c[j]
print(res) # ['Sun is bright', 'June and July', 'Sara goes to school']
答案 4 :(得分:1)
假设len(a)== len(b)和直接的方式,在时间复杂度和代码长度方面不是最好的解决方案。 Stackoverflow的小孩,试图贡献。
result = []
def solution():
ctr = 0
a = [1,1,1,2,2,2,3,3,3,3,4,4,5 ]
b= ["Sun", "is", "bright", "June","and" ,"July", "Sara", "goes", "to", "school", "Ravi","Stackoverflow","Solution"]
length = len(a)
i = 0
temp = ""
while(i < length ):
if i == 0:
temp = b[i]
else:
if i == length -1 and a[i] != a[i-1]:
result.append(temp)
result.append(b[i])
elif a[i] == a[i-1] and i != length - 1:
temp = temp+" "+b[i]
elif i == length - 1:
temp = temp+" "+b[i]
result.append(temp)
temp = b[i]
else:
result.append(temp)
temp = b[i]
i = i + 1
return result
print solution()
输出:['太阳很明亮','六月和七月','Sara去学校','Ravi Stackoverflow','解决方案']
答案 5 :(得分:0)
假设组中的单词(a
中的数字)始终相邻,
from itertools import groupby
def group_words(words, index):
index = iter(index)
return [' '.join(ws) for _, ws in groupby(words, key=lambda _: next(index))]
你可以通过你的名单,
>>> group_words(b, a)
['Sun is bright', 'June and July', 'Sara goes to school']
如果你想要一个更难读的单行,你也可以这样做,
>>> [' '.join([w for _, w in it]) for _, it in groupby(zip(a, b), key=lambda t: t[0])]
['Sun is bright', 'June and July', 'Sara goes to school']