Python:在 for 循环外和循环内添加到列表列表
Python: adding to list of lists both out and in a for loop
我想在 for 循环之外创建一个索引值为 0 的新列表,然后使用 for 循环添加到同一个列表。我的玩具示例是:
import random
data = ['t1', 't2', 't3']
masterlist = [['col1', 'animal1', 'animal2', 'animal3']]
animals = ['cat', 'dog', 'chinchilla']
for item in data:
masterlist.append([item])
for animal in animals:
number1 = random.randint(1, 100)
number2 = random.randint(1, 100)
masterlist.append([str(number1) + ',' + str(number2)])
masterlist
但这输出:
[['col1', 'animal1', 'animal2', 'animal3'],
['t1'],
['52,69'],
['8,77'],
['75,66'],
['t2'],
['67,33'],
['85,60'],
['98,12'],
['t3'],
['60,34'],
['25,27'],
['100,25']]
我想要的输出是:
[['col1', 'animal1', 'animal2', 'animal3'],
['t1', '52,69', '8,77', '75,66'],
['t2', '67,33', '85,60', '98,12'],
['t3', '60,34', '25,27', '100,25']]
这个稍微重构了您的代码的解决方案怎么样?
解决方案 1
import random
data = ['t1', 't2', 't3']
masterlist = [['col1', 'animal1', 'animal2', 'animal3']]
animals = ['cat', 'dog', 'chinchilla']
for item in data:
rv = []
rv.append(item)
for animal in animals:
number1 = random.randint(1, 100)
number2 = random.randint(1, 100)
rv.append(str(number1) + ',' + str(number2))
masterlist.append(rv)
输出:
>>> masterlist
[['col1', 'animal1', 'animal2', 'animal3'],
['t1', '88,43', '85,62', '84,21'],
['t2', '44,99', '32,54', '83,50'],
['t3', '82,87', '90,83', '91,84']]
或者,以下将给出相同的结果。
解决方案 2
import random
data = ['t1', 't2', 't3']
masterlist = [['col1', 'animal1', 'animal2', 'animal3']]
animals = ['cat', 'dog', 'chinchilla']
for item in data:
masterlist.append([item] + [f"{random.randint(1, 100)},{random.randint(1, 100)}" for animal in animals])
你可以这样做。使用 temp
列表来存储每次迭代的项目。
此外,您在附加时使用了很多方括号,这导致了嵌套过多的列表。
import random
data = ['t1', 't2', 't3']
masterlist = [['col1', 'animal1', 'animal2', 'animal3']]
animals = ['cat', 'dog', 'chinchilla']
for item in data:
temp = []
temp.append(item)
for animal in animals:
number1 = random.randint(1, 100)
number2 = random.randint(1, 100)
temp.append(str(number1) + ',' + str(number2))
masterlist.append(temp)
print(masterlist)
您还可以按如下方式使用列表理解:
import random
data = ['t1', 't2', 't3']
masterlist = [['col1', 'animal1', 'animal2', 'animal3']]
animals = ['cat', 'dog', 'chinchilla']
for d in data:
rv = [d] + [str(random.randint(1, 100)) + ',' + str(random.randint(1, 100)) for a in animals]
masterlist.append(rv)
或者在单个列表理解中更硬核:
masterlist+= [[d] + [str(random.randint(1, 100)) + ',' + str(random.randint(1, 100)) for a in animals] for d in data]
我想在 for 循环之外创建一个索引值为 0 的新列表,然后使用 for 循环添加到同一个列表。我的玩具示例是:
import random
data = ['t1', 't2', 't3']
masterlist = [['col1', 'animal1', 'animal2', 'animal3']]
animals = ['cat', 'dog', 'chinchilla']
for item in data:
masterlist.append([item])
for animal in animals:
number1 = random.randint(1, 100)
number2 = random.randint(1, 100)
masterlist.append([str(number1) + ',' + str(number2)])
masterlist
但这输出:
[['col1', 'animal1', 'animal2', 'animal3'],
['t1'],
['52,69'],
['8,77'],
['75,66'],
['t2'],
['67,33'],
['85,60'],
['98,12'],
['t3'],
['60,34'],
['25,27'],
['100,25']]
我想要的输出是:
[['col1', 'animal1', 'animal2', 'animal3'],
['t1', '52,69', '8,77', '75,66'],
['t2', '67,33', '85,60', '98,12'],
['t3', '60,34', '25,27', '100,25']]
这个稍微重构了您的代码的解决方案怎么样?
解决方案 1
import random
data = ['t1', 't2', 't3']
masterlist = [['col1', 'animal1', 'animal2', 'animal3']]
animals = ['cat', 'dog', 'chinchilla']
for item in data:
rv = []
rv.append(item)
for animal in animals:
number1 = random.randint(1, 100)
number2 = random.randint(1, 100)
rv.append(str(number1) + ',' + str(number2))
masterlist.append(rv)
输出:
>>> masterlist
[['col1', 'animal1', 'animal2', 'animal3'],
['t1', '88,43', '85,62', '84,21'],
['t2', '44,99', '32,54', '83,50'],
['t3', '82,87', '90,83', '91,84']]
或者,以下将给出相同的结果。
解决方案 2
import random
data = ['t1', 't2', 't3']
masterlist = [['col1', 'animal1', 'animal2', 'animal3']]
animals = ['cat', 'dog', 'chinchilla']
for item in data:
masterlist.append([item] + [f"{random.randint(1, 100)},{random.randint(1, 100)}" for animal in animals])
你可以这样做。使用 temp
列表来存储每次迭代的项目。
此外,您在附加时使用了很多方括号,这导致了嵌套过多的列表。
import random
data = ['t1', 't2', 't3']
masterlist = [['col1', 'animal1', 'animal2', 'animal3']]
animals = ['cat', 'dog', 'chinchilla']
for item in data:
temp = []
temp.append(item)
for animal in animals:
number1 = random.randint(1, 100)
number2 = random.randint(1, 100)
temp.append(str(number1) + ',' + str(number2))
masterlist.append(temp)
print(masterlist)
您还可以按如下方式使用列表理解:
import random
data = ['t1', 't2', 't3']
masterlist = [['col1', 'animal1', 'animal2', 'animal3']]
animals = ['cat', 'dog', 'chinchilla']
for d in data:
rv = [d] + [str(random.randint(1, 100)) + ',' + str(random.randint(1, 100)) for a in animals]
masterlist.append(rv)
或者在单个列表理解中更硬核:
masterlist+= [[d] + [str(random.randint(1, 100)) + ',' + str(random.randint(1, 100)) for a in animals] for d in data]