我测试后,
len_stat = [len(x) if len(x) > len_stat[i] else len_stat[i] for i, x in enumerate(a_list)]
与
相同for i, x in enumerate(a_list):
if len(x) > len_stat[i]:
len_stat[i] = len(x)
当然,但是,
len_stat = [len(x) if len(x) > len_stat[a_list.index(x)] else len_stat[a_list.index(x)] for x in a_list]
与
不同for x in a_list:
if len(x) > len_stat[a_list.index(x)]:
len_stat[a_list.index(x)] = len(x)
之后,我知道<list>.index
是一种不常用的方法。
但为什么他们在最后两个例子中有所不同?
我的错!这是我的测试代码,a_list = ['Bacteroides fragilis YCH46', 'YCH46', '20571', '-', 'PRJNA13067', 'FCB group', 'Bacteroidetes/Chlorobi group', 'GCA_000009925.1 ', '5.31099', '43.2378', 'chromosome:NC_006347.1/AP006841.1; plasmid pBFY46:NC_006297.1/AP006842.1', '-', '2', '4717', '4625', '2004/09/17', '2016/08/03', 'Complete Genome', 'ftp://ftp.ncbi.nlm.nih.gov/genomes/all/GCF_000009925.1_ASM992v1', 'ftp://ftp.ncbi.nlm.nih.gov/genomes/all/GCA_000009925.1_ASM992v1']
len_stat_1 = [0 for x in a_list]
len_stat_2 = [0 for x in a_list]
len_stat_3 = [0 for x in a_list]
len_stat_4 = [0 for x in a_list]
len_stat_1 = [len(x) if len(x) > len_stat_1[i] else len_stat_1[i] for i, x in enumerate(a_list)]
for i, x in enumerate(a_list):
if len(x) > len_stat_2[i]:
len_stat_2[i] = len(x)
len_stat_3 = [len(x) if len(x) > len_stat_3[a_list.index(x)] else len_stat_3[a_list.index(x)] for x in a_list]
for x in a_list:
if len(x) > len_stat_4[a_list.index(x)]:
len_stat_4[a_list.index(x)] = len(x)
print len_stat_1
print len_stat_2
print len_stat_3
print len_stat_4
输出:
[26, 5, 5, 1, 10, 9, 28, 16, 7, 7, 72, 1, 1, 4, 4, 10, 10, 15, 63, 63]
[26, 5, 5, 1, 10, 9, 28, 16, 7, 7, 72, 1, 1, 4, 4, 10, 10, 15, 63, 63]
[26, 5, 5, 1, 10, 9, 28, 16, 7, 7, 72, 1, 1, 4, 4, 10, 10, 15, 63, 63]
[26, 5, 5, 1, 10, 9, 28, 16, 7, 7, 72, 0, 1, 4, 4, 10, 10, 15, 63, 63]
如你所见,最后两个是不同的!
这让我很困惑。
答案 0 :(得分:1)
此列表理解:
len_stat = [len(x) if len(x) > len_stat[a_list.index(x)] else len_stat[a_list.index(x)] for x in a_list]
相当于:
temp = []
for x in a_list:
temp.append(len(x) if len(x) > len_stat[a_list.index(x)] else len_stat[a_list.index(x)])
len_stat = temp
相当于:
temp = []
for x in a_list:
if len(x) > len_stat[a_list.index(x)]:
val = len(x)
else:
val = len_stat[a_list.index(x)]
temp.append(val)
len_stat = temp
当然,等同于temp
列表。理解方法将使用新列表替换len_stat
,该列表将始终与len_stat
的长度相同,len(x)
中的每个x都会len_stat
或len_stat[a_list.index(x)]
{1}}。您编写的for循环将基于条件变异len_stat
,并且很难在不知道列表内容的情况下确切地说明会发生什么,但它可能会更改{{1}的值到处都是。