相关疑难解决方法(0)

如何在保留订单的同时从列表中删除重复项?

是否有内置功能可以从Python中的列表中删除重复项,同时保留顺序?我知道我可以使用一个集来删除重复项,但这会破坏原始顺序.我也知道我可以像这样滚动自己:

def uniq(input):
  output = []
  for x in input:
    if x not in output:
      output.append(x)
  return output
Run Code Online (Sandbox Code Playgroud)

(感谢您放松代码示例.)

但是如果可能的话,我想利用内置或更多的Pythonic习语.

相关问题:在Python中,从列表中删除重复项的最快算法是什么,以便所有元素在保留顺序的同时是唯一的?

python list unique duplicates

722
推荐指数
12
解决办法
52万
查看次数

使用列表推导仅仅是副作用是Pythonic吗?

想想我正在调用它的副作用的函数,而不是返回值(比如打印到屏幕,更新GUI,打印到文件等).

def fun_with_side_effects(x):
    ...side effects...
    return y
Run Code Online (Sandbox Code Playgroud)

现在,是Pythonic使用列表推导来调用这个函数:

[fun_with_side_effects(x) for x in y if (...conditions...)]
Run Code Online (Sandbox Code Playgroud)

请注意,我不会将列表保存在任何位置

或者我应该像这样调用这个函数:

for x in y:
    if (...conditions...):
        fun_with_side_effects(x)
Run Code Online (Sandbox Code Playgroud)

哪个更好?为什么?

python list-comprehension

97
推荐指数
4
解决办法
8534
查看次数


递归构建分层JSON树?

我有一个父子连接数据库.数据看起来如下所示,但可以以您想要的任何方式呈现(字典,列表,JSON等).

links=(("Tom","Dick"),("Dick","Harry"),("Tom","Larry"),("Bob","Leroy"),("Bob","Earl"))
Run Code Online (Sandbox Code Playgroud)

我需要的输出是一个分层的JSON树,它将用d3渲染.数据中有离散的子树,我将附加到根节点.所以我需要递归地遍历链接,并构建树结构.我能得到的最远的是遍历所有人并追加他们的孩子,但我无法想出更高阶的链接(例如如何将带孩子的人附加到其他人的孩子身上).这与此处的另一个问题类似,但我无法事先知道根节点,因此我无法实现已接受的解决方案.

我将从我的示例数据中获取以下树结构.

{
"name":"Root",
"children":[
    {
     "name":"Tom",
     "children":[
         {
         "name":"Dick",
         "children":[
             {"name":"Harry"}
         ]
         },
         {
          "name":"Larry"}
     ]
    },
    {
    "name":"Bob",
    "children":[
        {
        "name":"Leroy"
        },
        {
        "name":"Earl"
        }
    ]
    }
]
}
Run Code Online (Sandbox Code Playgroud)

这个结构在我的d3布局中呈现如下. 渲染图像

python django recursion json d3.js

9
推荐指数
1
解决办法
1万
查看次数

从 Python 中的嵌套列表中提取唯一列表

我想从嵌套列表中提取唯一数据,请参见下文。我实现了两种方式。第一个效果很好,但第二个失败了。new_data计算时是否为空?我该如何解决它?

 data = [                                                                                                                                      
     ['a', 'b'],                                                                                                                               
     ['a', 'c'],                                                                                                                               
     ['a', 'b'],                                                                                                                               
     ['b', 'a']                                                                                                                                
 ]                                                                                                                                             

 # working                                                                                                                                          
 new_data = []                                                                                                                                 
 for d in data:                                                                                                                                
     if d not in new_data:                                                                                                                     
         new_data.append(d)                                                                                                                    
 print(new_data)                                                                                                                               
 # [['a', 'b'], ['a','c'], ['b','a']]                                                                                                          

 # Failed to extract unique list                                                                                                                                 
 new_data = []                                                                                                                                 
 new_data = [d for d in data if d not in new_data]                                                                                             
 print(new_data)                                                                                                                               
 # [['a', 'b'], ['a', 'c'], ['a', 'b'], ['b', 'a']] 
Run Code Online (Sandbox Code Playgroud)

python python-3.x

1
推荐指数
1
解决办法
5557
查看次数

Python:在列表理解本身中引用列表理解?

这个想法刚刚出现在我的脑海中。假设您出于某种原因想要通过 Python 中的列表理解来获取列表的唯一元素。

[i if i in {created_comprehension} else 0 for i in [1, 2, 1, 2, 3]

[1, 2, 0, 0, 3]

我不知道,我确实没有这样做的目的,但如果可以在创建时引用理解,那就太酷了。

(例如,如何使用列表理解从列表中删除重复的项目?是一个类似的问题)

python list-comprehension list

0
推荐指数
1
解决办法
1005
查看次数