创建列表列表

2024-05-16 03:15:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样的代码:

Loop that appends player names to a list called playerlist
print(playerlist)
lineuplist.append(playerlist)

print语句最后打印的列表如下所示:

...
['Omer Asik', 'Jordan Farmar', 'Patrick Beverley', 'Kyle Korver', 'Kent Bazemore', 'Pau Gasol', 'Paul Millsap', 'Chandler Parsons', 'Kevin Durant']
['Omer Asik', 'Jordan Farmar', 'Patrick Beverley', 'Kyle Korver', 'Kent Bazemore', 'Serge Ibaka', 'Pau Gasol', 'Kevin Durant', 'Chandler Parsons']
['Omer Asik', 'Jordan Farmar', 'Patrick Beverley', 'Kyle Korver', 'Kent Bazemore', 'Serge Ibaka', 'Pau Gasol', 'Chandler Parsons', 'Kevin Durant']
['Omer Asik', 'Jordan Farmar', 'Patrick Beverley', 'Kyle Korver', 'Kent Bazemore', 'Paul Millsap', 'Pau Gasol', 'Kevin Durant', 'Chandler Parsons']
...

我希望我的输出是这些列表的列表,即:

[['Omer Asik', 'Jordan Farmar', 'Patrick Beverley', 'Kyle Korver', 'Kent Bazemore', 'Pau Gasol', 'Paul Millsap', 'Chandler Parsons', 'Kevin Durant'],     ['Omer Asik', 'Jordan Farmar', 'Patrick Beverley', 'Kyle Korver', 'Kent Bazemore', 'Serge Ibaka', 'Pau Gasol', 'Kevin Durant', 'Chandler Parsons'], ['Omer Asik', 'Jordan Farmar', 'Patrick Beverley', 'Kyle Korver', 'Kent Bazemore', 'Serge Ibaka', 'Pau Gasol', 'Chandler Parsons', 'Kevin Durant'],     ['Omer Asik', 'Jordan Farmar', 'Patrick Beverley', 'Kyle Korver', 'Kent Bazemore', 'Paul Millsap', 'Pau Gasol', 'Kevin Durant', 'Chandler Parsons']]

然而,我得到的是:

print(lineuplist)
[[], [], [], [], []]

我不太清楚我哪里出错了,所以任何帮助都很感激。你知道吗


Tags: kylekevinchandlerpatrickpaukentparsonsjordan
2条回答

列表内容消失的实际问题已经在另一个答案中得到了解决,但是我想指出的是,您可以使您的代码更加简单。你知道吗

如果我理解的代码(现在从问题中删除)正确,你是在寻找球员组合形成一个合法阵容的球队,其综合工资在一定范围内。球队需要一名来自C组的球员(队长?),以及PGSGPFSF组中的每个组中的2个。你知道吗

您可以为此使用^{}模块,特别是^{}^{}。你知道吗

from itertools import product, combinations
player_combinations = product(combinations(C, 1), 
                              combinations(PG, 2),
                              combinations(SG, 2),
                              combinations(PF, 2),
                              combinations(SF, 2))

更新:这将返回嵌套的元组列表,因此需要首先将其展平。你可以用^{}来做这个。)

player_combinations = (sum(pc, ()) for pc in player_combinations)

结果是一个迭代器,包含所有播放器的组合(整个对象,而不仅仅是名称)。现在,您可以在一个循环中找到满足薪资标准的团队,并提取他们的名称:

lineuplist = []
for players in player_combinations:
    salary = sum(player[5] for player in players)
    if salarycap - undersalary <= salary <= salarycap:
        names = [player[1] for player in players]
        lineuplist.append(names)

当您将列表附加到主列表中时,实际上是将指针附加到原始列表。Python列表是可变的,当您更改它们时,只要有指向它们的指针,就可以更改它们。你知道吗

如果附加它们的副本,可以避免这一问题,但会浪费内存,因此有充分的理由复制它们很重要。你知道吗

下面是这种行为的一个例子:

>>> l = list('abc')
>>> m = [l.copy()]
>>> m
[['a', 'b', 'c']]
>>> l.remove('a')
>>> m
[['a', 'b', 'c']]
>>> l
['b', 'c']

所以你能做的是:

lineuplist.append(playerlist.copy())

而不是这样:

lineuplist.append(playerlist)

相关问题 更多 >