在列表列表中连接两个字符串

时间:2018-03-17 12:33:36

标签: python

我有一个包含以下内容的列表列表:

animal = [[1, 'Crocodile','Lion'],[2, 'Eagle','Sparrow'],[3, 'Hippo','Platypus','Deer']]

我想加入动物表中每个列表中的字符串元素,以便它成为一个单独的字符串:

 animal = [[1, 'Crocodile, Lion'],[2, 'Eagle, Sparrow'],[3,'Hippo, Platypus, Deer']]

我尝试使用for循环加入它们:

for i in range(len(animal)):
     ''.join(animal[1:]) #string at index 1 and so on
print(animal)

我收到类型错误,说“TypeError:sequence item 0:expected str instance,list found”。

7 个答案:

答案 0 :(得分:1)

animal可以被称为table,并且应该表明它不仅仅是一只动物。它也不应该被称为animals,因为它不仅仅是一个动物列表。

感谢unpacking,您可以将子列表直接拆分为整数和动物列表:

>>> table = [[1, 'Crocodile','Lion'],[2, 'Eagle','Sparrow'],[3, 'Hippo','Platypus','Deer']]
>>> [[i, ', '.join(animals)] for (i, *animals) in table]
[[1, 'Crocodile, Lion'], [2, 'Eagle, Sparrow'], [3, 'Hippo, Platypus, Deer']]

答案 1 :(得分:1)

>>> [[a[0], ','.join(a[1:])] for a in animal]
>>> [[1, 'Crocodile,Lion'], [2, 'Eagle,Sparrow'], [3, 'Hippo,Platypus,Deer']]

答案 2 :(得分:1)

只需要进行一些小改动,你就忘记了循环中的索引:

animal = [[1, 'Crocodile','Lion'],[2, 'Eagle','Sparrow'],[3, 'Hippo','Platypus','Deer']]

merged_animal = []

for element in animal:
    merged_animal.append([element[0], ", ".join(element[1:])])

print(merged_animal)

但如果您了解列表推导,最好使用它们,如许多答案中所示。

答案 3 :(得分:0)

您的代码存在两个问题:

animal[1:]是以下列表

>>> animal[1:]
[[2, 'Eagle', 'Sparrow'], [3, 'Hippo', 'Platypus', 'Deer']]

如果你在循环的每次迭代中join它会发生什么? 第二个问题是你没有将join的返回值赋给任何东西,所以即使操作不会抛出错误,你也会失去结果。

以下是extended iterable unpacking的解决方案:

>>> animal = [[1, 'Crocodile','Lion'],[2, 'Eagle','Sparrow'],[3,'Hippo','Platypus','Deer']]
>>> [[head, ', '.join(tail)] for head, *tail in animal]
[[1, 'Crocodile, Lion'], [2, 'Eagle, Sparrow'], [3, 'Hippo, Platypus, Deer']]

这是一个没有:

>>> [[sub[0], ', '.join(sub[1:])] for sub in animal]
[[1, 'Crocodile, Lion'], [2, 'Eagle, Sparrow'], [3, 'Hippo, Platypus, Deer']]

答案 4 :(得分:0)

animal是一个列表列表,因此您需要一个额外的索引。你可以通过添加

来看到这一点
print(animal[i])
print(animal[i][0])
print(animal[i][1])
循环中的

animal = [[1, 'Crocodile','Lion'],[2, 'Eagle','Sparrow'],[3, 'Hippo','Platypus','Deer']]

for i in range(len(animal)):
    print(animal[i][1:])
    animal[i][1] = ' '.join(animal[i][1:]) #string at index 1 and so on
    del animal[i][2:]


print(animal)

答案 5 :(得分:0)

首先,类型错误即将到来,因为您在列表动物上应用join()而不是列表动物的子列表。

您还应该记住,join不会编辑原始列表,只会返回新字符串。

因此,如果你记住以上两点,你的新代码将会是这样的

for i in range(len(animal)):
 animal[i] = [animal[i][0], ', '.join(animal[i][1:])] #string at index 1 and so on
print(animal)

上面的代码将每个子列表替换为包含子列表编号的另一个子列表,以及通过将原始子列表的剩余部分与', ' 连接而形成的字符串(请注意您的错误,您正在加入一个空的字符,但您的要求是逗号和空格。

答案 6 :(得分:0)

l1=[[1, 'Crocodile','Lion'],[2, 'Eagle','Sparrow'],[3, 'Hippo','Platypus','Deer']]

l2 = list(map(lambda x: [x[0],"{}, {}".format(x[1],x[2])],l1))
print(l2)