相关疑难解决方法(0)

在Python中以列表(循环方式)迭代对

问题很简单,我想迭代遍历列表中的每个元素和成对的下一个元素(将最后一个元素包装在第一个元素中).

我想过两种非常规的方式:

def pairs(lst):
    n = len(lst)
    for i in range(n):
        yield lst[i],lst[(i+1)%n]
Run Code Online (Sandbox Code Playgroud)

和:

def pairs(lst):
    return zip(lst,lst[1:]+[lst[:1]])
Run Code Online (Sandbox Code Playgroud)

预期产量:

>>> for i in pairs(range(10)):
    print i

(0, 1)
(1, 2)
(2, 3)
(3, 4)
(4, 5)
(5, 6)
(6, 7)
(7, 8)
(8, 9)
(9, 0)
>>> 
Run Code Online (Sandbox Code Playgroud)

有关更多pythonic方式的任何建议吗?也许有一个我没有听说过的预定义功能?

也是一个更普遍的n折(有三胞胎,四重奏等代替对)版本可能很有趣.

python iteration tuples list

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

TypeError:'range'对象不支持项目分配

我正在查看一些python 2.x代码并尝试将其翻译为py 3.x但我仍然坚持这一部分.谁能澄清什么是错的?

import random

emails = {
    "x": "[REDACTED]@hotmail.com",
    "x2": "[REDACTED]@hotmail.com",
    "x3": "[REDACTED]@hotmail.com"
}

people = emails.keys()

#generate a number for everyone
allocations = range(len(people))
random.shuffle(allocations)
Run Code Online (Sandbox Code Playgroud)

这是给出的错误:

TypeError: 'range' object does not support item assignment
Run Code Online (Sandbox Code Playgroud)

python python-3.x

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

Union使用Python查找实现

所以这就是我想要做的:我有一个包含几个等价关系的列表:

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

我想结合共享一个元素的集合.这是一个示例实现:

def union(lis):
  lis = [set(e) for e in lis]
  res = []
  while True:
    for i in range(len(lis)):
      a = lis[i]
      if res == []:
        res.append(a)
      else:
        pointer = 0 
        while pointer < len(res):
          if a & res[pointer] != set([]) :
            res[pointer] = res[pointer].union(a)
            break
          pointer +=1
        if pointer == len(res):
          res.append(a)
     if res == lis:
      break
    lis,res = res,[]
  return res
Run Code Online (Sandbox Code Playgroud)

它打印出来

[set([1, 2, 3, …
Run Code Online (Sandbox Code Playgroud)

python list union-find

10
推荐指数
3
解决办法
4853
查看次数

合并列表与交集

鉴于:

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:基于交叉点的简单列表合并

我正在尝试对对象进行分类.每个对象都由一个名为的唯一标识符属性标识id.所以我的分类逻辑是这样的.首先,我准备一个对象列表,然后分类函数一次获取2个对象并返回frozenset包含它们的对象id.因此,如果object1object5属于同一类别,frozenset(id1,id5)则返回a.现在我继续将这些frozensets添加到一个集合中,所以最后我有一个这样的集合

matched_set=(
             frozenset(id1,id2),
             frozenset(id9,id3),
             frozenset(id9,id2),
             frozenset(id24,id22),
             frozenset(id1,id23),
             frozenset(id25,id24),
             frozenset(id30,id24)
            )
Run Code Online (Sandbox Code Playgroud)

现在因为具有id1id2属于同一类别的对象,具有id9id3属于同一类别的对象,具有id9id2属于同一类别的对象,所以具有的对象id1,id2,id3,id9应该在同一类别中.所以我应该有这样的一套set(id1,id2,id3,id9) 可以有人提供算法这样做吗?谢谢

python algorithm set

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

如果出现任何交叉点(以有效的方式),我如何才能获得2D列表项的并集?

我在python中有2D列表

list = [[9, 2, 7], [9, 7], [2, 7], [1, 0], [0, 5, 4]]
Run Code Online (Sandbox Code Playgroud)

如果出现任何交叉点,我想获得列表项的联合.例如[9, 2, 7],[9, 7],[2, 7]具有多于一个位的交叉点.这种联盟将是[9,2,7].

如何以有效的方式获得如下最终列表?

finalList = [[9,2,7], [0, 1, 5, 4]]
Run Code Online (Sandbox Code Playgroud)

NB数字顺序并不重要.

python intersection list set

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