【问题标题】:Creating multiple list from loops从循环创建多个列表
【发布时间】:2013-07-16 11:02:26
【问题描述】:

我想用我的 for 循环创建多个列表,我的代码是:

  for port in portlist1:
    print port.getname(),port.getsize()
    for register in port.getregisters():
        j=j+1
    print j
    j=0

输出是:

  B 10
  1
  C 15
  1
  F 30
  1

我想每次都列出来:

List1=[[B,10],1]
List2=[[C,15],1]
List3=[[F,30],1]

有人可以帮我吗?

【问题讨论】:

  • 所以本质上您希望输出格式不同?
  • 使用列表推导:[ [[p.getname(),p.getsize()],len(p.getregisters())] for p in portlist1]

标签: python


【解决方案1】:
lists = []
for port in portlist1:
    l = [[port.getname(), port.getsize()]]
    for register in port.getregisters():
        j=j+1
    l.append(j)
    lists.append(l)
    j=0

【讨论】:

  • 按照 alecxe 的建议内联或使用生成器使代码比具有多个查找开销(如 l.append)的变体快得多。顺便说一句,j=j+1 = 哈哈。 --> j+=1
【解决方案2】:

目前尚不清楚循环前j 的值是多少,但看起来您正在使用它来测量port.getregisters() 的长度。试试这个单行:

result = [[[port.getname(), port.getsize()], len(port.getregisters())] for port in portlist1]

【讨论】:

  • len() 调用缺少关闭括号
  • @alecxe Да пожалуйста! ;)
【解决方案3】:

每次都创建一个新列表是个坏主意,您应该嵌套每个列表。如果端口数量是静态的,您可以使用vars()['listX'].. 但仍然不推荐。你应该选择kroolikalecxe给出的答案

但如果你真的需要类似的东西……:

List1=[[B,10],1]
List2=[[C,15],1]
List3=[[F,30],1]

你可以使用:

lname = "list"
for i,p in enumerate(portlist1):
    j = len(p.getregisters())
    vars()[lname+str(i)] = [(p.getname(),p.getsize()), j]

print list0
print list1
print list2

【讨论】:

  • vars()[lname+str(i)] 是非pythonic
  • @akaRem :这不是我推荐的,我只是回答了他的问题:«Creating multiple list from loops»
  • 看起来你真的推荐它来解决这个问题..呃。
  • @akaRem,再读一遍:“但仍然没有真正推荐。你应该选择 kroolik 或 alecxe 给出的答案”。我回答了这个问题,他要求将不同的列表作为输出“我想每次都制作列表:*给出的示例*”。
  • “我想每次都列出”-> 使用yield,它既快速又安全。但我不会再推了。 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-14
  • 1970-01-01
  • 2018-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多