python - 更改列表列表并在 python 2.7 中创建一个新列表
问题描述
我有一个类似这个小例子的列表:
mylist = [['chr1', '+', '11873', '14409', 'DDX11L1'], ['chr1', '-', '14361', '16765', 'WASH7P']]
我正在尝试制作一个新的列表列表,而不是每个子列表,我将有 3 个子列表。实际上new list of list
(称为 newmylist)将有 6 个子列表。事实上,在 newmylist 中,每 3 个新的子列表都与第 3 列和第 4 列类似。第 3 列是开始,第 4 列是结束。要计算 newmylist 中的第 3 列和第 4 列,我会将(difference between columns 4 and 3) by 3
. 例如关于第sublist
一个mylist
:
(14409 - 11873)/3 = 845
所以在 newmylisy 的第一个子列表中,开始是 11873,结束是 12718,在第二个子列表中,开始是 12718,结束是 13563。同样在第三个子列表中,开始是 13563,结束是 14409。将在 newmylist 中创建第二个 3 个子列表来自 mylist 的第二个子列表。这是预期的输出
expected output
:
newmylist = [['chr1', '+', '11873', '12718', 'DDX11L1'], ['chr1', '+', '12718', '13563', 'DDX11L1'], ['chr1', '+', '13563', '14409', 'DDX11L1'], ['chr1', '-', '14361', '15162', 'WASH7P'], ['chr1', '-', '15162', '15963', 'WASH7P'], ['chr1', '-', '15963', '16765', 'WASH7P']]
我正在尝试python
使用以下代码来做到这一点。此代码不会返回我正在寻找的内容。你知道怎么解决吗?
start = []
for item in mylist:
start.append(item[2])
end = []
for item in mylist:
end.append(item[3])
diff = []
for item in mylist:
d = item[3]-item[2]/3
diff.append(d)
newmylist = []
for i in range(len(mylist)):
content = [i[0], i[1], start[i], start[i]+diff[i], i[4]]
newmylist.append(content)
解决方案
您并没有真正将您的列表分成 3 个单独的列表(在您的最后一个循环中)。一种方法是定义一个名为的函数,该函数可以根据split
需要拆分列表。然后您可以方便地在每个子列表上调用该函数:
def split(l, chunks=3):
diff = (int(l[3]) - int(l[2])) // chunks
res = []
for i in range(chunks):
res.append([l[0], l[1], str(int(l[2]) + diff * i), str(int(l[2]) + diff * (i + 1)), l[4]])
res[-1][3] = l[3] # adjust last number to match what "l" has
return res
mylist = [['chr1', '+', '11873', '14409', 'DDX11L1'], ['chr1', '-', '14361', '16765', 'WASH7P']]
newmylist = []
for lst in mylist:
for newlst in split(lst):
newmylist.append(newlst)
print(newmylist)
输出
[['chr1', '+', '11873', '12718', 'DDX11L1'],
['chr1', '+', '12718', '13563', 'DDX11L1'],
['chr1', '+', '13563', '14409', 'DDX11L1'],
['chr1', '-', '14361', '15162', 'WASH7P'],
['chr1', '-', '15162', '15963', 'WASH7P'],
['chr1', '-', '15963', '16765', 'WASH7P']]
请注意,如果您愿意,也可以使用列表推导:
newmylst = [newlst for lst in mylist for newlst in split(lst)]
推荐阅读
- c++ - 在头文件中放置结构时出错
- regex - 无限期重复两个捕获组的正则表达式(或在两个捕获组之间放置一个或)
- javascript - 如何在 echarts 堆积条形图顶部添加总和 [根据所选系列更新]
- .net-core - 使用 .net 核心进行 XML Schematron 验证
- python - 如何从字典列表中获取值并追加
- docker - 使用官方 Docker 镜像运行 JanusGraph 时,如何设置 graph.set-vertex-id=true ?
- python - 运行测试时看到 ModuleNotFoundError
- firebase - 仅为登录 Flutter 应用程序的用户检索 Cloud Firestore 数据
- java - 为什么使用 println 方法的多线程可见性问题表现不同
- regex - 动态添加时 validators.pattern 中的角度问题