首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python 3.6 -将多个列表中的列分离到新列表中

Python 3.6 -将多个列表中的列分离到新列表中
EN

Stack Overflow用户
提问于 2017-08-22 21:38:36
回答 3查看 46关注 0票数 0

这是我的代码,它计算唯一数字出现的次数,并查找在列表A中重复5次的数字,然后在列表A中查找任何重复2次的数字,并打印列表A的任何匹配结果和列表B中的相应值。此外,列表A和B的大小始终相同。

代码语言:javascript
复制
a = (['12','12','12','12','12','23','24','24','31','31'])
b = (['1','2','2','2','2','2','5','5','5','5'])

from collections import Counter
counts = Counter(a)

c = []

for ai , bi in zip(a,b):
   if counts[ai] == 5:
       c.append([ai,bi])
   elif counts[ai] == 1:
       c.append([ai,bi])
   else:
       None

print(c)
#[['12', '1'], ['12', '2'], ['12', '2'], ['12', '2'], ['12', '2'], ['23', '2']]

有没有一种快速的方法,让我的代码可以将多个输出列表重新格式化为一个列表,如下所示:

代码语言:javascript
复制
#[('12', '12', '12', '12', '12', '23'), ('1', '2', '2', '2', '2', '2')]

以便每个列表中的每一列都可以有自己的列表。

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-08-22 21:49:50

这又如何呢:

代码语言:javascript
复制
import itertools

c = [['12', '1'], ['12', '2'], ['12', '2'], ['12', '2'], ['12', '2'], ['23', '2']]

merged = list(itertools.chain(*c))
# merged = ['12', '1', '12', '2', '12', '2', '12', '2', '12', '2', '23', '2']

split = [tuple(merged[::2]), tuple(merged[1::2])]
# split = [('12', '12', '12', '12', '12', '23'), ('1', '2', '2', '2', '2', '2')]
票数 2
EN

Stack Overflow用户

发布于 2017-08-22 22:11:04

从您的代码继续

代码语言:javascript
复制
c = [['12', '1'], ['12', '2'], ['12', '2'], ['12', '2'], ['12', '2'], ['23', '2']]

cols = [] #initialize list of columns
for i in range(2):
  tup = tuple([item[i] for item in c]) #create tuple from loop of column
  cols.append(tup)
print(cols) # [('12', '12', '12', '12', '12', '23'), ('1', '2', '2', '2', '2', '2')]
票数 1
EN

Stack Overflow用户

发布于 2017-08-22 22:14:17

你可以使用列表理解

代码语言:javascript
复制
>>> x = [['12', '1'], ['12', '2'], ['12', '2'], ['12', '2'], ['12', '2'], ['23', '2']]
>>> [tuple(v[0] for v in x), tuple(v[1] for v in x)]
[('12', '12', '12', '12', '12', '23'), ('1', '2', '2', '2', '2', '2')]

以您最初想要的格式保存数据可能会更有效率。元组是不可变的,所以使用列表和追加列表会更容易。类似于:

代码语言:javascript
复制
columns = []
values = []

for ai , bi in zip(a,b):
   if counts[ai] == 5:
       columns.append(ai)
       values.append(bi)
   elif counts[ai] == 1:
       columns.append(ai)
       values.append(bi)

print([columns, values])

# prints this
[['12', '12', '12', '12', '12', '23'], ['1', '2', '2', '2', '2', '2']]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45819256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档