相关疑难解决方法(0)

如何在列表中找到重复项并使用它们创建另一个列表?

如何在Python列表中找到重复项并创建另一个重复项列表?该列表仅包含整数.

python list duplicates

397
推荐指数
17
解决办法
59万
查看次数

在Python中展平浅层列表

是否有一种简单的方法可以使用列表推导来展平迭代列表,或者失败,你会认为什么是平衡这样的浅层列表,平衡性能和可读性的最佳方法?

我尝试使用嵌套列表理解来压缩这样的列表,如下所示:

[image for image in menuitem for menuitem in list_of_menuitems]
Run Code Online (Sandbox Code Playgroud)

但我在NameError那里遇到麻烦,因为name 'menuitem' is not defined.谷歌搜索并浏览Stack Overflow后,我得到了一个reduce声明所需的结果:

reduce(list.__add__, map(lambda x: list(x), list_of_menuitems))
Run Code Online (Sandbox Code Playgroud)

但是这个方法相当难以理解,因为我需要那个list(x)调用,因为x是一个Django QuerySet对象.

结论:

感谢所有为此问题做出贡献的人.以下是我学到的内容摘要.我也将其作为社区维基,以防其他人想要添加或更正这些观察结果.

我原来的reduce语句是多余的,用这种方式编写得更好:

>>> reduce(list.__add__, (list(mi) for mi in list_of_menuitems))
Run Code Online (Sandbox Code Playgroud)

这是嵌套列表理解的正确语法(Brilliant summary dF!):

>>> [image for mi in list_of_menuitems for image in mi]
Run Code Online (Sandbox Code Playgroud)

但这些方法都不如使用效率高itertools.chain:

>>> from itertools import chain
>>> list(chain(*list_of_menuitems))
Run Code Online (Sandbox Code Playgroud)

正如@cdleary指出的那样,通过使用chain.from_iterable如下所示来避免*操作符魔术可能是更好的风格:

>>> chain = itertools.chain.from_iterable([[1,2],[3],[5,89],[],[6]])
>>> print(list(chain))
>>> [1, 2, …
Run Code Online (Sandbox Code Playgroud)

python list-comprehension

382
推荐指数
10
解决办法
17万
查看次数

找到多组交集的最佳方法是什么?

我有一套套装:

setlist = [s1,s2,s3...]
Run Code Online (Sandbox Code Playgroud)

我想要s1∩s2∩s3...

我可以通过执行一系列成对s1.intersection(s2)等来编写一个函数来完成它.

有推荐的,更好的或内置的方式吗?

python set set-intersection

232
推荐指数
5
解决办法
14万
查看次数

有用的代码使用reduce()?

这里有没有人有任何有用的代码在python中使用reduce()函数?除了我们在示例中看到的通常的+和*之外,还有其他代码吗?

通过GvR 参考Python 3000中的reduce()命运

python functional-programming

120
推荐指数
12
解决办法
8万
查看次数

python中关于错误与成功的返回值的最佳实践

一般的,假设你有一个像下面的方法.

def intersect_two_lists(self, list1, list2):
    if not list1:
        self.trap_error("union_two_lists: list1 must not be empty.")
        return False
    if not list2:
        self.trap_error("union_two_lists: list2 must not be empty.")
        return False
    #http://bytes.com/topic/python/answers/19083-standard
    return filter(lambda x:x in list1,list2)
Run Code Online (Sandbox Code Playgroud)

在这个特殊的方法中,当发现错误时,我不想在这种情况下返回空列表,因为这可能是这个特定方法调用的真正答案,我想返回一些东西来指示参数不正确.所以我在这种情况下错误地返回False,否则返回一个列表(空或不).

我的问题是,在这样的领域中最好的做法是什么,而不仅仅是列表?返回我想要的任何东西,并确保我记录下来供用户阅读?:-)你们大多数人都做了什么:

  1. 如果成功,你应该返回True或False,你会发现错误?
  2. 如果成功,你应该返回一个列表,你会发现错误?
  3. 如果成功,你应该返回一个文件句柄,你会发现错误?
  4. 等等

python return

48
推荐指数
4
解决办法
7万
查看次数

两个列表之间的公共元素不使用Python中的集合

我想要计算两个列表的相同元素.列表可以有重复的元素,因此我无法将其转换为集合并使用&运算符.

a=[2,2,1,1]
b=[1,1,3,3]
Run Code Online (Sandbox Code Playgroud)

设置(a)和设置(b)工作
a和b不起作用

有可能用套装和dictonary吗?

python list set

11
推荐指数
2
解决办法
2万
查看次数

Python中两个列表的有序交集

我知道在Python中,如果我有:

list_1 = [1,2,3]
list_2 = [2,3,4]
Run Code Online (Sandbox Code Playgroud)

我可以做以下事情来找到两者之间的交集:

list(set(list_1) & set(list_2))
# = [2,3]
Run Code Online (Sandbox Code Playgroud)

但是这种方法存在一个问题:集合不像列表那样维护顺序.所以如果我真的有:

list_1 = [3,2,1]
list_2 = [2,3,4]
Run Code Online (Sandbox Code Playgroud)

我明白了:

list(set(list_1) & set(list_2))
# = [2,3]
Run Code Online (Sandbox Code Playgroud)

即使我更喜欢从第一个列表中获得订单,即:

# = [3,2]
Run Code Online (Sandbox Code Playgroud)

是否有另一种交叉技术可以使得到的"交集"与第一个列表保持相同的顺序?

python list

10
推荐指数
2
解决办法
7156
查看次数

合并列表与交集

鉴于:

g=[[], [], [0, 2], [1, 5], [0, 2, 3, 7], [4, 6], [1, 4, 5, 6], [], [], [3, 7]]
Run Code Online (Sandbox Code Playgroud)

如何比较g中的每个列表,以便对于共享的列表,任何公共号码都可以合并到一个集合中?

例如
0存在于g[2],g[4] 因此它们合并为一组{0,2,3,7}

我尝试了以下但它不起作用:

for i in g:
    for j in g:
        if k in i == l in j:
            m=set(i+j)
Run Code Online (Sandbox Code Playgroud)

我想做出最大可能的设定.

python algorithm set

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

在python中查找两个字符串列表的交集

我已经通过查找两个列表的交集?的两个列表字符串路口获取两个列表的交集的蟒蛇。但是,我无法解决使用 Python 查找两个字符串列表之间的交集的问题。

我有两个变量。

A = [['11@N3'], ['23@N0'], ['62@N0'], ['99@N0'], ['47@N7']]

B  = [['23@N0'], ['12@N1']]
Run Code Online (Sandbox Code Playgroud)

如何找到 '23@N0' 是 A 和 B 的一部分?

我尝试使用http://www.saltycrane.com/blog/2008/01/how-to-find-intersection-and-union-of/ 中提到的 intersect(a,b) 但是,当我尝试转换 A进入集合,它抛出一个错误:

File "<stdin>", line 1, in <module> TypeError: unhashable type: 'list'
Run Code Online (Sandbox Code Playgroud)

要将其转换为集合,我使用了TypeError: unhashable type: 'list' when using built-in set function中的方法,其中列表可以使用转换

result = sorted(set(map(tuple, A)), reverse=True)
Run Code Online (Sandbox Code Playgroud)

成元组,然后元组可以转换成一个集合。但是,这会返回一个空集作为交集。

你能帮我找到路口吗?

python string intersection list set

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

比较列表以查找python中的常见元素

可能重复:
Python - 两个列表的交集

我正在尝试比较两个列表,以便找到它们共有的元素数量.

我遇到的主要问题是,例如,当任一列表包含重复的元素时

A = [1,1,1,1]   and  
B = [1,1,2,3]
Run Code Online (Sandbox Code Playgroud)

使用代码

n = 0
for x in A:
   if x in B:
      n += 1
print n
Run Code Online (Sandbox Code Playgroud)

给我的输出n = 4,从技术上讲,A的所有元素都在B中

我想获得输出n = 2,最好不使用套装,无论如何我可以调整我的代码,或者一种新的思考问题的方法来实现这个目标吗?

谢谢

python

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