相关疑难解决方法(0)

如何将列表拆分为大小均匀的块?

我有一个任意长度的列表,我需要将它分成相同大小的块并对其进行操作.有一些明显的方法可以做到这一点,比如保留一个计数器和两个列表,当第二个列表填满时,将它添加到第一个列表并清空下一轮数据的第二个列表,但这可能非常昂贵.

我想知道是否有人对任何长度的列表都有一个很好的解决方案,例如使用生成器.

我一直在寻找有用的东西,itertools但我找不到任何明显有用的东西.但是可能会错过它.

相关问题:在块中迭代列表的最"pythonic"方法是什么?

python split list chunks

2068
推荐指数
40
解决办法
84万
查看次数

在块中迭代列表的最"pythonic"方法是什么?

我有一个Python脚本,它将整数列表作为输入,我需要一次使用四个整数.不幸的是,我无法控制输入,或者我将它作为四元素元组列表传入.目前,我正在以这种方式迭代它:

for i in xrange(0, len(ints), 4):
    # dummy op for example code
    foo += ints[i] * ints[i + 1] + ints[i + 2] * ints[i + 3]
Run Code Online (Sandbox Code Playgroud)

它看起来很像"C-think",这让我怀疑有更多的pythonic方式来处理这种情况.迭代后会丢弃该列表,因此无需保留.也许这样的事情会更好吗?

while ints:
    foo += ints[0] * ints[1] + ints[2] * ints[3]
    ints[0:4] = []
Run Code Online (Sandbox Code Playgroud)

但是,仍然没有"感觉"正确.: - /

相关问题:如何在Python中将列表拆分为大小均匀的块?

python optimization loops list chunks

449
推荐指数
15
解决办法
12万
查看次数

单列表中的对

通常情况下,我发现需要成对处理列表.我想知道哪个是pythonic和有效的方法,并在谷歌上找到了这个:

pairs = zip(t[::2], t[1::2])
Run Code Online (Sandbox Code Playgroud)

我认为这是pythonic足够的,但在最近讨论成语与效率之后,我决定做一些测试:

import time
from itertools import islice, izip

def pairs_1(t):
    return zip(t[::2], t[1::2]) 

def pairs_2(t):
    return izip(t[::2], t[1::2]) 

def pairs_3(t):
    return izip(islice(t,None,None,2), islice(t,1,None,2))

A = range(10000)
B = xrange(len(A))

def pairs_4(t):
    # ignore value of t!
    t = B
    return izip(islice(t,None,None,2), islice(t,1,None,2))

for f in pairs_1, pairs_2, pairs_3, pairs_4:
    # time the pairing
    s = time.time()
    for i in range(1000):
        p = f(A)
    t1 = time.time() - s

    # time using the pairs …
Run Code Online (Sandbox Code Playgroud)

python zip idioms list slice

87
推荐指数
3
解决办法
5万
查看次数

创建子列表

与列表展平相反.

给定列表和长度n返回长度为n的子列表的列表.

def sublist(lst, n):
    sub=[] ; result=[]
    for i in lst:
        sub+=[i]
        if len(sub)==n: result+=[sub] ; sub=[]
    if sub: result+=[sub]
    return result
Run Code Online (Sandbox Code Playgroud)

一个例子:

如果列表是:

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

而n是:

3
Run Code Online (Sandbox Code Playgroud)

返回:

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

有更有说服力/简洁的方式吗?

另外,将列表附加到列表时(在上面的上下文中)首选:

list1+=[list2]
Run Code Online (Sandbox Code Playgroud)

要么:

list1.append(list2)
Run Code Online (Sandbox Code Playgroud)

鉴于此(根据Summerfeild的"Python 3编程"),它们是一样的吗?

谢谢.

python grouping list

18
推荐指数
4
解决办法
3万
查看次数

为循环赛锦标赛分组列表组合

编辑:我的问题不是重复,因为有人标记.另一个问题是不正确的,甚至不起作用.

我已经尝试了几种方法来对itertools.combinations的结果进行分组,并且无法提供正确的输出.需要在游戏中创建匹配.每个团队都需要每天都玩,但只需要一次.在接下来的几天里,球队需要扮演不同的球队,直到每个人都参加了比赛.

teams = [team 1, team 2, team 3, team 4]
print list(itertools.combinations(teams, 2))
Run Code Online (Sandbox Code Playgroud)

结果:

[(team 1, team 2), (team 1, team 3), (team 1, team 4), (team 2, team 3), (team 2, team 4), (team 3, team 4)]
Run Code Online (Sandbox Code Playgroud)

但我需要的是将它们分组,没有任何重复的列表项.例:

[
    [(team 1,team 2), (team 3,team 4)], #day 1
    [(team 1,team 3), (team 2,team 4)], #day 2
    [(team 1,team 4), (team 2,team 3)]  #day 3
]
Run Code Online (Sandbox Code Playgroud)

任何提示将不胜感激,我觉得可能有一个简单的单行程来完成这项工作.

python combinations list python-itertools

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

如何在Python中将不带引号的字符串转换成字典

我有一串

"{a:'b', c:'d',e:''}"
Run Code Online (Sandbox Code Playgroud)

请不要因为字典条目的键未加引号,所以上一个问题eval("{a:'b', c:'d',e:''}")所建议的简单方法不起作用。

将这个字符串转换成字典的最方便的方法是什么?

{'a':'b', 'c':'d', 'e':''}
Run Code Online (Sandbox Code Playgroud)

python

5
推荐指数
2
解决办法
409
查看次数

组合嵌套列表中的列表,如果列表包含相同的元素?

我有一个结构与此类似的嵌套列表,但它显然要长得多:

mylist = [ ["Bob", "12-01 2:30"], ["Sal", "12-01 5:23"], ["Jill", "12-02 1:28"] ]
Run Code Online (Sandbox Code Playgroud)

我的目标是创建另一个嵌套列表,具有相同日期的所有元素组合在一起。因此,需要以下输出:

newlist = [  [["Bob", "12-01 2:30"], ["Sal", "12-01 5:23"]], [["Jill", "12-02 1:28"]]  ]
Run Code Online (Sandbox Code Playgroud)

上面,日期为 12-01 的所有项目,无论时间如何,都组合在一起,12-02 的所有元素都组合在一起。

在过去的 1 小时里,我一直在真诚地研究如何做到这一点,但找不到任何东西。此外,我是编程的初学者,所以我不够熟练,无法尝试创建自己的解决方案。所以,请不要认为我没有尝试做研究或自己尝试尝试这个问题。我将在下面添加一些链接作为我的研究示例:

将列表中的每一对元素收集到 Python 中的元组中

如果条件为真,则创建具有相邻列表元素的元组列表

如何在 Python 中连接两个列表?

在没有嵌套 for 循环的情况下在 Python 中连接两个字符串元素列表

根据字符串中的匹配日期将两个列表压缩在一起

如何将列表合并为元组列表?

python list python-3.x

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