使用其值逻辑 - Python组合两个python列表

时间:2016-02-13 18:00:33

标签: python list

我想在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"]

6 个答案:

答案 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']