从“列表”创建子列表

1 投票
5 回答
4987 浏览
提问于 2025-04-18 05:49

我有一个文件里面有一个列表,

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”呢?

5 个回答

0

你可以使用 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)
0
#!/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)

像这样吗?

1

假设这是一个名为 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')

这些是 元组,如果你需要把它们变成列表,可以对每一个调用 list() 函数:

print list(i)
print list(q)
1

假设你已经处理过这个文件:

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']

这段代码会把每个子列表中的第一个和第二个元素提取出来,然后放到一个新的变量里。

2

如果你有一个包含多个列表的列表,可以使用 zip() 函数把列变成行:

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

a, b = zip(*file_result)

撰写回答