问题描述
我有三个字符串列表,我想为每次迭代查找长度最大的字符串,以将它们的长度存储在列表中。例如,如果我有三个字符串A,B和C的列表,我希望将第一次迭代的最大字符串的长度存储在列表Z中。这是代码:
x = ['2341','132','122322']
z = ['1','31231','123']
il = ['89801','13312312','840119']
bl = list()
for i,j,k in zip(x,z,il):
if len(i) >= len(j):
if len(i) >= len(k):
bl.append(len(i))
elif len(j) >= len(i):
if len(j) >= len(k):
bl.append(len(j))
else:
bl.append(len(k))
print(bl)
因此,我期望列表bl为[5、8、6],因为它们是每次迭代的最大字符串的长度,但是当我打印输出时,它仅显示[6]。我做错了什么?
解决方法
我认为您对此过于复杂了。
您可以使用max()在每次迭代中获取最大长度,例如
x = ['2341','132','122322']
z = ['1','31231','123']
il = ['89801','13312312','840119']
bl = list()
for i,j,k in zip(x,z,il):
bl.append(max(len(i),len(j),len(k)))
print(bl)
这将按您的预期打印[5,8,6]
这是因为您没有在else
和if len(i) >= len(k)
之后给出if len(j) >= len(k)
语句
x = ['2341',il):
if len(i) >= len(j):
if len(i) >= len(k):
bl.append(len(i))
else:
bl.append(len(k))
elif len(j) >= len(i):
if len(j) >= len(k):
bl.append(len(j))
else:
bl.append(len(k))
else:
bl.append(len(k))
print(bl)
这有点复杂,我宁愿您像@lucy_datanalyst
给出的答案一样使用max()
对于使用列表理解的解决方案,以下代码采用每个元素的最大长度
[max(len(x[i]),len(z[i]),len(il[i])) for i in range(len(il))]
对于调试代码,条件语句是错误的
x = ['2341',il):
print(i,k)
if len(i) >= len(j):
if len(i) >= len(k):
bl.append(len(i))
elif len(j) >= len(i):
if len(j) >= len(k):
bl.append(len(j))
else:
bl.append(len(k))
print(bl)
调试结束:
2341 1 89801
[]
132 31231 13312312
[]
122322 123 840119
[6]