查找长度最大的字符串并将其存储在列表中的问题

问题描述

我有三个字符串列表,我想为每次迭代查找长度最大的字符串,以将它们的长度存储在列表中。例如,如果我有三个字符串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]

,

这是因为您没有在elseif 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]