相关疑难解决方法(0)

将序列列表有效地拆分为两个列表

可能重复:
Python中的转置/解压缩功能

我有一个序列列表,每个序列有两个项目.我想把它变成两个列表.

catalog = [('abc', '123'), ('foo', '456'), ('bar', '789'), ('test', '1337')]
Run Code Online (Sandbox Code Playgroud)

现在我只是这样做:

names = []
vals = []

for product in catalog:
        names.append(product[0])
        vals.append(product[1])

print (names)
print (vals)
Run Code Online (Sandbox Code Playgroud)

哪个输出两个列表,并且工作得很好:

['abc', 'foo', 'bar', 'test']
['123', '456', '789', '1337']
Run Code Online (Sandbox Code Playgroud)

有更整洁,更'pythonic'的方式吗?或者我应该坚持我拥有的东西?对编程风格的任何更正或反馈都是受欢迎的,我是新手,并试图学习最佳实践.

python python-3.x

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

在列表字典的每个索引处查找最小值和最大值

我有一个字典有以下结构

{key1: [1,2,3,4,5], key2: [2,0,4,5,6]}
Run Code Online (Sandbox Code Playgroud)

我需要找到值列表的每个索引的最大值和最小值,因此在索引0处,我们比较1 and 2并选择2最大值和1最小值等.

我的例子的预期输出:

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

我不能使用运算符,因为我不允许导入它.我尝试使用以下方法但失败(语法错误).此外,我不会迭代值集,因为不是优雅的方式(IMO).

maxVal = max(myDictionary.items(), key=(lambda k: myDictionary[k]))
Run Code Online (Sandbox Code Playgroud)

给我

TypeError: unhashable type: 'list'
Run Code Online (Sandbox Code Playgroud)

你能纠正它还是建议任何替代方法.

python

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

python列拆分

我有一个格式的python数组:

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

有没有办法让我把它分解成列给出:

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

python numpy

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

python从一个列表创建几个列表

我列出了类似于mylist = [1,2,3,4,5,6]现在的东西我需要遍历此列表并创建3个这样的新列表

 new1 = [1,4]
 new2 = [2,5]
 new3 = [3,6]
Run Code Online (Sandbox Code Playgroud)

最简单的方法是什么?

python list python-2.7

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

如何将这个元组元组转换为元素数?

我有这个tuple元组:

TupleOfTuples = (('Venue1', 'Name1'), ('Venue1', 'Name2'), 
                 ('Venue2', 'Name3'), ('Venue3', 'Name4'), 
                 ('Venue3', 'Name5'), ('Venue3', 'Name6'))
Run Code Online (Sandbox Code Playgroud)

我想将其转换为得到如下结果:

Output = (('Venue1', 2), ('Venue2', 1), ('Venue3', 3))
Run Code Online (Sandbox Code Playgroud)

在这种情况下,Output包含('Venue1', 2),例如,在哪里发生2的次数.'Venue1'TupleOfTuples

我尝试len()用来计算出现次数,但是它不起作用,因为它TupleOfTuples不是单个元组而是元组的元组.

如何在Python2.7中完成?

python tuples count python-2.7

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

按列表A排序列表B?

假设我有一些带有k个元素的列表A,以及带有k个元素的列表B. 我想对列表A进行排序,但我也希望以相同的方式置换列表B.

例如

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

排序后A:

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

python list

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

在 python 中,我可以使用 tee 延迟生成迭代器的副本吗?

我正在尝试创建一个迭代器,它会延迟创建迭代器的(可能是无限多个)副本。这可能吗?

我知道我可以通过简单地创建任何固定的有限数量的副本

from itertools import tee
iter_copies = tee(my_iter, n=10)
Run Code Online (Sandbox Code Playgroud)

但如果您事先不知道 n 或者 n 是无限的,那么这种情况就会失败。

我通常会尝试一些类似的事情

from itertools import tee

def inf_tee(my_iter):
    while True:
        yield tee(my_iter)[1]
Run Code Online (Sandbox Code Playgroud)

但文档指出,在迭代器上使用 tee 后,原始迭代器将无法再使用,因此这不起作用。


如果您对该应用程序感兴趣:其想法是创建一个惰性函数,可能在pytoolzunzip中使用。我当前的实现可以处理有限数量的无限迭代器(这比 plain 更好),但不能处理无限数量的无限迭代器。如果您对详细信息感兴趣,请参阅以下拉取请求。zip(*seq)

python iterator lazy-evaluation

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

迭代值列表字典

我有这样的字典

data = {
    'a': [95, 93, 90],
    'b': [643, 611, 610]
}
Run Code Online (Sandbox Code Playgroud)

我想迭代dict并从每个项的值列表中获取键和值,类似这样

{'a': 95, 'b': 643}
{'a': 93, 'b': 611}
{'a': 90, 'b': 610}
Run Code Online (Sandbox Code Playgroud)

我已经为此实现了逻辑并且它工作正常,但是当我看到正在temp_dict创建的过程中,我看到许多中间不必要的循环.最终的结果很好,但我认为它可以改进很多.

import timeit

data = {
    'a': [95, 93, 90],
    'b': [643, 611, 610]
}


def calculate(**kwargs):
    temp_dict = {}
    index = 0
    len_values = list(kwargs.values())[0]

    while index < len(len_values):
        for k, v in kwargs.items():
            temp_dict[k] = v[index]
        index += 1
        yield temp_dict


start_time = timeit.default_timer()
for k in (calculate(**data)):
    print(k)
print(timeit.default_timer() …
Run Code Online (Sandbox Code Playgroud)

python dictionary

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

更多pythonic方式(字符串拆分)?

d是一个字符串列表,其中每个项目由两部分组成(用点连接).我想在每个字符串项的点之前和之后提取部分.

我就是这样做的.

d = ['a1.b1', 'a2.b2', 'a3.b3']
b = [c.split('.')[0] for c in d]
a = [c.split('.')[1] for c in d]
Run Code Online (Sandbox Code Playgroud)

但我猜有更多的pythonic方式?

python

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

python3解压缩元组列表

在python2.7中,下面的代码获取字典fd(在此示例中表示单词及其计数的频率分布),并将其分为两个列表的列表:[[keys],[values]]:

sortedDKandVs = [zip(*sorted(fd.items(), key=itemgetter(1), reverse=True))] #[word,word,...],[count,count]
Run Code Online (Sandbox Code Playgroud)

我可以做,例如:

keys = sortedDKandVs[0]
values = sortedDKandVs[1]
Run Code Online (Sandbox Code Playgroud)

这不再适用于Python3,我想知道如何转换代码.

这里没有答案如何将元组列表解压缩到单个列表中?因为在Python3中,zip对象返回迭代器而不是列表,但是我不知道如何转换答案.

python-3.x

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