在确定列表中的值是否与“主列表”匹配之后,我需要生成一个新字典,返回true或false。我希望使用另一个列表中的标签将这些新的真/假列表附加到字典中。因此,每个新列表(下面的an )都将有相同数量的值(每个值为True/False ),这些值将被用作生成一个不愉快的地块的数据索引。示例代码如下:
a = []
b = []
c = []
d = []
for motif in unique_motifs:
if motif in motif_lists[0]:
a.append('True')
else:
a.append('False')
for motif in unique_motifs:
if motif in motif_lists[1]:
b.append('True')
else:
b.append('False')
for motif in unique_motifs:
if motif in motif_lists[2]:
c.append('True')
else:
c.append('False')
for motif in unique_motifs:
if motif in motif_lists[3]:
d.append('True')
else:
d.append('False')
data_dictionary = {'motif_key': unique_motifs, \
args.plot_labels[0]: a, \
args.plot_labels[1]: b, \
args.plot_labels[2]: c, \
args.plot_labels[3]: d}下面是motif_lists和主列表unique_motifs中每个列表的一些示例值
unique_motifs = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
motif_lists[0] = ['B', 'C']
motif_lists[1] = ['A']
motif_lists[2] = ['B', 'C', 'E', 'G']
motif_lists[3] = ['D', 'F']然后,上面的代码将创建如下新的列表:
a = ['False', 'True', 'True', 'False', 'False', 'False', 'False']
b = ['True', 'False', 'False', 'False', 'False', 'False', 'False']
c = ['False', 'True', 'True', 'False', 'True', 'False', 'True']
d = ['False', 'False', 'False', 'True', 'False', 'True', 'False']然后就会被附加到字典里。每个plot_labels值都是一个字符串,将用作唯一标识符。我真的很想将这段代码和压缩为一个奖金,我希望这个字典/生成的列表数/for循环可以根据len(motif_lists) (由用户输入提供的文件数量来确定)进行扩展。已经有一个检查已经到位,以确保len(motif_lists) == len(args.plot_labels。例如,如果是len(motif_lists) == 7,我将得到如上面所示的列表a、b、c、d、e、f和g。我想有一种方法可以这样做:
for n, val in enumerate(motif_lists):
globals()["list%d"%n] = []然后我会设定一个用户输入值的限制,这样它就不会失控.
发布于 2019-11-27 00:35:14
您可以将重复循环替换为:
for bin, motif_list in zip([a, b, c, d], motif_lists):
for motif in unique_motifs:
if motif in motif_list:
bin.append('True')
else:
bin.append('False')如评论中所述,上述内容可进一步减少为:
for bin, motif_list in zip([a, b, c, d], motif_lists):
for motif in unique_motifs:
bin.append(motif in motif_list)事实上,您可以以这种方式继续下去,直到将上面的内容简化为列表理解为止,但是可读性可能会受到影响。由你决定。
对于你想要压缩的另一部分,你可以做这样的事情:
data_dictionary = {'motif_key': unique_motifs, **{args.plot_labels[i]: bins[i] for i in range(len(args.plot_labels))}}其中,bins是一个包含列表的列表-- a、b等。所以,如下所示:
bins = [[] for _ in range(len(motif_lists))]我合并上面的字典的方式只能从python3.5开始。有关更多信息,请参见此answer。
https://stackoverflow.com/questions/59061366
复制相似问题