Python:列表长度为单个整数

时间:2018-01-21 16:21:20

标签: python python-3.x

我是Python的新手,我试图将列表的长度输出为单个整数,例如:

l1 = ['a', 'b', 'c'] 
len(l1) = 3

但是,它在cmdline上打印,页面下方有1秒,例如: 1 1 1 1 1 1 等

如何才能输出数字而不是1的列表?

(这里是代码:)

def Q3():
  from datetime import datetime, timedelta 
  inputauth = open("auth.log", "r") 
  authStrings = inputauth.readlines() 

  failedPass = 'Failed password for'
  for line in authStrings:
    time = line[7:15]
    dateHour = line[0:9]
    countAttack1 = []

    if time in line and failedPass in line:
      if dateHour == 'Feb  3 08':
        countAttack1.append(time)
        length1 = len(countAttack1)
        print(length1)

理想情况下,我希望在打印中输出数字,以便我可以格式化它,也就是说:

print("Attack 1: " + length1)

3 个答案:

答案 0 :(得分:1)

我认为你是循环的,ifs在循环中。如果是这样,只需打印循环范围外的长度。 请分享完整的代码以获得更好的答案

答案 1 :(得分:1)

正如Syed Abdul Wahab所说,问题在于"列表"正在重新创建每个循环。这使得打印报告" 1",因为它是列表的实际长度。 另一个问题是,printng的重复是类似的 - 你实际上是打印"每次都在循环中#34;。

解决方案很简单:在循环外初始化列表;并在循环外报告。

def Q3():
  from datetime import datetime, timedelta 
  inputauth = open("auth.log", "r") 
  authStrings = inputauth.readlines() 

  failedPass = 'Failed password for'
  countAttack1 = []  # after this line the countAttack will be empty
  for line in authStrings:
    time = line[7:15]
    dateHour = line[0:9]

    if time in line and failedPass in line:
      if dateHour == 'Feb  3 08':
        countAttack1.append(time)

  length1 = len(countAttack1)
  print("Attack 1: " + str(length1))

我还想花一些时间将您链接到string formatting虽然文档很复杂但它会使打印变得更加容易,上面的打印结果变成了:

print("Attack 1: {0}".format(length1))

<小时/> 进一步分析代码会给出一些特殊性,您可以检查time字符串中是否line。 - 但是,您只需从上面的一些代码行创建time的{​​{1}} - 所以它始终位于line内。 (除了行的长度不正确的边缘情况,但是反正的错误)。因此if语句应简化为:

line

答案 2 :(得分:0)

这是打印长度的函数:

def print_length():
    if time in line and failedPass in line:    
        if dateHour == 'Feb  3 08':
           countAttack1.append(time)
    length1 = len(countAttack1)
    print(length1)
print_length()
>>>Print length of the List.