【问题标题】:Creating Sublists from a "List"从“列表”创建子列表
【发布时间】:2014-05-08 13:04:38
【问题描述】:

我在一个文件中有一个列表, 看起来像这样

c4a24534,2434b375,e750c718, .... 

我已经在“,”处拆分并带来了以下列表。

x=
['c4a2', '4534'] 
['2434', 'b375']
['e750', 'c718']

我需要从中创建两个新列表

i=
'c4a2'
'2434'
'e750'

 q=
'4534'
'b375'
'c718'

我试过了:

for x in line:
    x = [i.split() for i in x]

有了这个,我将 x 拆分。这给了我 "i" 部分,但我如何得到其余的 "q" ?

【问题讨论】:

  • 这是一个文件,其中每一行都有一个只有 2 个元素的列表?
  • 是的,我需要分别处理这两个元素
  • 结果必须是字符串还是列表? (a 和 b)
  • 没错..所以我有 ['19df', 'cf47'] 并且我需要 a=19df 和 b=cf47... 对于文件中的其余数据类似
  • “我在文件中有一个列表”是什么意思?请显示您拥有的文件或列表。您显示的语法无效,但看起来也不像文件示例。

标签: python python-2.7


【解决方案1】:

如果您已阅读列表列表,请使用zip() 将列变为行:

file_result = [
    ['19df', 'b35d']
    ['fafa', 'bbaf']
    ['dce9', 'cf47']
]

a, b = zip(*file_result)

【讨论】:

    【解决方案2】:

    认为您已经解析了文件是理所当然的:

    x = [['c4a2', '4534'], ['2434', 'b375'], ['e750', 'c718']]
    i = [a[0] for a in x] # ['c4a2', '2434', 'e750']
    q = [a[1] for a in x] # ['4534', 'b375', 'c718']
    

    这会获取每个子列表的第一个和第二个元素,并将其放入一个新变量中。

    【讨论】:

    • i = [a[0] for a in x] 正在从“c4a2”中选择“c”,从“4534”中选择“4”
    • @user3615736 这不是...你有没有[a[0][0] for a in x]
    • 我猜是x = ['c4a2', '4534'],与我的例子中x的结构不匹配。
    • 好的..我已经在我的问题中添加了,我的文件到底是什么样的
    【解决方案3】:

    假设这是input.txt文件的内容:

    c4a24534,2434b375,e750c718
    

    使用zip() 拆分成两个列表:

    with open('input.txt') as f:
        i, q = zip(*((x[:4], x[4:]) for line in f for x in line.split(',')))
    
    print i
    print q
    

    打印:

    ('c4a2', '2434', 'e750')
    ('4534', 'b375', 'c718')
    

    这些是tuples,如果您需要从中列出列表,请分别致电list()

    print list(i)
    print list(q)
    

    【讨论】:

    • 试过了,它把所有的数字都分配给“i”和 \n 给“q”.. 似乎稍微遗漏了它
    • @user3615736 然后澄清格式。显示更多行以及 iq 应该等于什么。
    • 试过 split('\n') 而不是 (',') ,我得到 'c4a2', '', '2434', '', 'e750', for "i" 。数字是对的。我如何摆脱他们之间的''。谢谢
    【解决方案4】:
    #!/usr/bin/python
    import ast
    file = open("file.txt","r")
    
    i = list()
    q = list()
    
    for line in file:
        testarray = ast.literal_eval(line)
        q.append(testarray.pop())
        i.append(testarray.pop())
    
    print(i)
    print(q)
    

    类似的东西?

    【讨论】:

      【解决方案5】:

      您可以使用zip 将列表分成两个集合。

      x=[
      ['c4a2', '4534'], 
      ['2434', 'b375'],
      ['e750', 'c718']
      ]
      
      i,q = zip(*x)
      
      print i
      print q
      

      结果:

      ('c4a2', '2434', 'e750')
      ('4534', 'b375', 'c718')
      

      不过,这些是元组。如果您真的想要列表,则需要转换它们。

      i,q = map(list, zip(*x))
      #or:
      i,q = [list(tup) for tup in zip(*x)]
      #or:
      i,q = zip(*x)
      i, q = list(i), list(q)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-07
        相关资源
        最近更新 更多