代码之家  ›  专栏  ›  技术社区  ›  vighnesh153

我的代码没有生成预期的结果

  •  0
  • vighnesh153  · 技术社区  · 7 年前

    我希望代码能够打印包含以下数字的列表:

    • 两位数或三位数的乘积
    • 回文
    • 范围[1011011000000]。

    最终列表中不应该有5位数字和一些6位数字,因为它们小于101101。但经过处理后仍有一些5位数的数字。为什么会这样?

    list1 = []
    for i in range(100, 1000):
        for j in range(100, 1000):
            if str(i*j) == str(i*j)[::-1]:   # checking for palindrome
                list1.append(i*j)
    
    
    list1 = list(set(list1)) # removing duplicates
    
    print(sorted(list1))
    # print(len(list1))
    
    for ii in list1:                      # removing numbers, out of range
        if ii < 101101 or ii >= 1000000:
            list1.remove(ii)
    
    
    print(sorted(list1))
    # print(len(list1))
    

    但是,当我使用集合移除超出范围的元素时,它是有效的。下面给出的代码可以完成这项工作。

    set1 = set(range(10000, 101102))
    list1 = list(set(list1) - set1)
    

    但我不明白,为什么以前的代码不能打印出所需的输出?

    编辑:正如你们中的一个所建议的,是的,它是 this . 我不想在现有的银行里查这个问题。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Mad Physicist    7 年前

    for ii in list1:                      # removing numbers, out of range
         if ii < 101101 or ii >= 1000000:
              list1.remove(ii)
    

    list1

    1. ii

        10001, 20002, 30003, 40004, ...
          ^
          ii
      
    2.   20002, 30003, 40004, ...
      
          ii -> 10001
      

    3.   20002, 30003, 40004, ...
                 ^
                 ii
      

    1.   list1 = [x for x in list1 if len(x) > 5]
      
    2.  for ii in reversed(list1):
            if ii < 101101 or ii >= 1000000:
                 list1.remove(ii)
      

       for ii in range(len(list1), -1, -1):
            if list1[ii] < 101101 or list1[ii] >= 1000000:
                 del list1[ii]
      

        2
  •  1
  •   ruohola    7 年前

    list1 = []
    for i in range(100, 1000):
         for j in range(100, 1000):
            if str(i*j) == str(i*j)[::-1]:   # checking for palindrome
                list1.append(i*j)
    
    # Use list comprehension to filter unwanted values from the list.
    list1 = sorted([value for value in set(list1) if 101101 <= value < 1000000])
    
    
    print(list1)
    
    推荐文章