对此有一些严重的麻烦,即使这看起来非常基本。
我有两个清单;一个是二维的,其中有四个总列表,所有这些都包含四个字符串格式的字符。另一个也是二维的,有四个总列表,但列表是空的。
list1 = [['abcd'], ['abcd'], ['abcd'], ['abcd']]
list2 = [[], [], [], []]
所以,我试图做的是遍历list1的列表,并将每个列表的第n个字符添加到list2中的第n个列表。
之后应该的样子:(例如)
list1 = [['abcd'], ['abcd'], ['abcd'], ['abcd']]
list2 = [['aaaa'], ['bbbb'], ['cccc'], ['dddd']]
我尝试过:
i = 0
n = 0
while n < 4:
for list in list1:
list2[n] += list[i][n] # n = nth character
n += 1
首先,我不得不承认我不知道[i]在这里做了什么,或者为什么它甚至在第一时间起作用;如果我用[0]替换[i],它将停止工作并返回索引错误。
输出的内容:
list2 = [['a', 'a', 'a', 'a'], ['b', 'b', 'b', 'b'], ['c', 'c', 'c', 'c'], ['d', 'd', 'd', 'd']]
我应该如何更改代码以获取上述格式的字符串?
答案 0 :(得分:1)
您可以使用list2
上的str.join()功能获取所需内容:
list1 = [['abcd'], ['abcd'], ['abcd'], ['abcd']]
list2 = [[], [], [], []]
i = 0
n = 0
while n < 4:
for sub_list in list1:
list2[n] += sub_list[i][n] # n = nth character
n += 1
list2 = [[''.join(listx)] for listx in list2]
答案 1 :(得分:0)
你可以试试这个:
list1 = [['abcd'], ['abcd'], ['abcd'], ['abcd']]
list2 = [[], [], [], []]
final_list = [[a[i]*4] for i, [[a], b] in enumerate(zip(list1, list2))]
输出:
[['aaaa'], ['bbbb'], ['cccc'], ['dddd']]
答案 2 :(得分:0)
您的代码存在的问题是list2[n] +=
会在list2[n]
列表中添加一个元素。相反,您想要创建一个字符串。请注意,您最初没有要追加的字符串。
由于您的目的是重复添加相同的字符,因此您不必为此设计循环。您可以使用*
运算符。
for i, list in enumerate(list1):
list2[i].append(list[0][i] * 4)
注意:如果您想用结果覆盖list2
,请查看其他一些答案。这个答案会使原来的list2
就地变异。
答案 3 :(得分:0)
我对您的代码做了一些小改动:
list1 = [['abcd'], ['abcd'], ['abcd'], ['abcd']]
list2 = [[], [], [], []]
i = 0
n = 0
while n < 4:
for l in list1:
string = "".join(l[i][n] * len(l[0])) # Changed line
list2[n] = [string] # Placed assignment out of 'for' loop
n += 1
print(list2)
输出结果为:
[['aaaa'], ['bbbb'], ['cccc'], ['dddd']]