我有一个包含以下内容的列表列表:
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”。
答案 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)