【问题标题】:Python: creating empty lists within empty lists?Python:在空列表中创建空列表?
【发布时间】:2014-01-30 01:43:21
【问题描述】:

编辑:所以我发现如果我在一开始就声明它可以正常工作:

RelayPlaceHolder = [[],[],[],[],[],[],[],[],[]]

为什么不能像这样创建相同类型的空容器?空列表的数量可能会改变:

for SwimTeams in SwimTeamList:
                empty = []
                RelayPlaceHolder.append(empty)

这是我的老问题...


我有一个单独的字典列表的列表:

TeamAgeGroupGender[team#][swimmer#][their dictionary with a key such as {"free":19.05}]

我有一个循环,对于第一级列表中的每个团队,它会遍历该团队列表中的每个游泳者,并将与键值“free”相对应的游泳添加到名为 @987654324 的新列表中@

    for SwimTeams in SwimTeamList:
            empty = []
            RelayPlaceHolder.append(empty)
            teamid = SwimTeamList.index(SwimTeams)
            print SwimTeams
            print teamid

            for swimmers in TeamAgeGroupGender[teamid]:
                swimmerID = TeamAgeGroupGender[teamid].index(swimmers)
                RelayPlaceHolder[teamid].append({SwimTeams:TeamAgeGroupGender[teamid][swimmerID]["Free"]})
            print RelayPlaceHolder[teamid][0]

期望:

RelayPlaceHolder[0][*** list of swims that go with this team#0 ***] 
RelayPlaceHolder[1][*** list of swims that go with team#1, ie the next teamid in the loop***]

出于某种原因,我的循环只是将游泳添加到RelayPlaceHolder[0],即使是来自第 1 队的游泳。我尝试使用打印进行故障排除,但是,teamid 索引和swimteam 名称从 #0 更改为 #1 很好,但是,我的 RelayPlaceHolder[teamid].append 仍在添加到 #0 列表而不是 #1 .我也知道这一点,因为后面代码中的键值无法在 RelayPlaceHolder[1] 中找到正确的键(因为它变成了空的)。我不确定为什么我的循环失败了。我在其他循环中使用过类似的结构...

谢谢。

【问题讨论】:

  • 如果您需要定义任意数量的列表,简洁的语法是[[] for i in range(some_number)]
  • 谢谢@doukremt。这正是我所需要的。

标签: python list loops


【解决方案1】:

正如@doukremt 所评论的:如果您需要定义任意数量的列表,一个简洁的语法是:

[[] for i in range(some_number)]

如果需要经常做,可以在函数中实现:

>>> lists = lambda x: [[] for i in range(x)]
>>> lists(3)
[[], [], []]

【讨论】:

    猜你喜欢
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    • 2013-11-20
    • 2018-11-11
    • 1970-01-01
    相关资源
    最近更新 更多