【问题标题】:How to remove "L" which comes after each list value in Django如何删除Django中每个列表值之后的“L”
【发布时间】:2016-04-18 13:20:35
【问题描述】:

我进行了一次查询以从模型中获取所有字段值。我将结果存储在查询集中。

queryset=Books.objects.filter(book_type="comic")

现在当我过滤这个查询集时:

query=queryset.filter(~Q(auther_id=1))
autherList=[]
for q in query:
    autherList.append(q.auther_id)
print autherList

它将列表打印为:

[3L, 4L, 9L, 13L, 53L, 53L, 102L, 111L, 111L, 111L, 111L] 

我的问题是:这个 L 表示什么以及如何删除它以获得一个简单的 id 列表。

我查看了这个,但找不到任何关于此的内容。

【问题讨论】:

    标签: python django django-orm


    【解决方案1】:

    这不是文字L,它代表数据类型long。这只是一个命令行表示,您不必担心,因为它只会为您的模型id 字段保存更多数字。

    【讨论】:

    • ids存储为int,那么它如何变成“long”数据类型。
    • 它是自动生成的身份验证 ID,它在我的数据库中显示 int 类型。
    • 我已经在我的问题中回答了。这取决于底层的数据库库。
    • 确切地说应该是长整数,因为 id 可能会超出int 可以容纳的限制。这只是命令行表示的一种方式,不会影响你使用id的方式。
    • 非常感谢@ShangWang
    【解决方案2】:

    L 表示项目属于long 类型。

    底层数据库库(可能是mysql?)正在创建long 类型,同时从数据库中获取它们。所以他们是long,而不是普通的旧int

    您可以使用int 函数将它们转换为整数。

    >>> lng_number = 23L
    
    >>> int_num = int(lng_number)
    
    >>> int_num
    23
    

    如果所有的值都是long类型,你可以像这样使用map

    >>> long_list = [1L, 3L, 10L]
    
    >>> int_list = map(int, long_list)
    
    >>> int_list
    [1, 3, 10]
    
    >>>
    

    【讨论】:

    • 可以写成列表理解,有些人认为它比 map() 更具可读性:int_list = [int(item) for item in long_list].
    【解决方案3】:
    Try this one 
    
    [3L, 4L, 9L, 13L, 53L, 53L, 102L, 111L, 111L, 111L, 111L] 
    
    use this ::
    remove_extra = [int(item_list) for item_list in remove_extra]
    
    
    ****** if you want to remove duplicate value from list then use **set()**
    
    like this::
    
    
    **list(set(remove_extra))**
    

    【讨论】:

    • 为什么不直接使用map
    • @AbuAshrafMasnun.... 您的列表理解中不需要地图。 Map 创建另一个列表,因此您最终会得到一个列表列表。
    • 我不是说在列表理解中使用 map。您可以使用它来代替列表推导。
    【解决方案4】:

    我试过了,效果很好

    >>> a = [3L, 4L, 9L, 13L, 53L, 53L, 102L, 111L, 111L, 111L, 111L] 
    >>> b = map(int,a)
    >>> b
    [3, 4, 9, 13, 53, 53, 102, 111, 111, 111, 111]
    

    但您不必担心,因为 Python 将其视为数字

    >>> a = [3L, 4L, 9L, 13L, 53L, 53L, 102L, 111L, 111L, 111L, 111L] 
    >>> b = [c*2 for c in a]
    >>> b
    [6L, 8L, 18L, 26L, 106L, 106L, 204L, 222L, 222L, 222L, 222L]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多