我想从每个列表创建具有相同索引元素的词典列表。
我有这本字典:
d = {'name': ['bob', 'john', 'harry', 'mary'],
'age': [13, 19, 23],
'height': [164, 188],
'job': ['programmer']}
Run Code Online (Sandbox Code Playgroud)
所需的输出是:
d2 = [{'name': 'bob', 'age': 13, 'height': 164, 'job': 'programmer'},
{'name': 'john', 'age': 19, 'height': 188},
{'name': 'harry', 'age': 23},
{'name': 'mary'}]
Run Code Online (Sandbox Code Playgroud)
我已经尝试过这样的事情:
d2 = [dict(zip(d, t)) for t in zip(*d.values())]
Run Code Online (Sandbox Code Playgroud)
但是我的输出是:
d2 = [{'name': 'bob', 'age': 13, 'height': 164, 'job': 'programmer'}]
Run Code Online (Sandbox Code Playgroud)
我认为这是因为列表的长度不同而引起的。
如何在Python中实现argmax?它应该尽可能高效,因此它应该与iterables一起使用.
可以实施的三种方式:
f,返回最大的键f(key)我可以想到的Python itertools.repeat()类的每一个用途,我可以想到另一个同样(可能更多)可接受的解决方案来实现相同的效果.例如:
>>> [i for i in itertools.repeat('example', 5)]
['example', 'example', 'example', 'example', 'example']
>>> ['example'] * 5
['example', 'example', 'example', 'example', 'example']
>>> list(map(str.upper, itertools.repeat('example', 5)))
['EXAMPLE', 'EXAMPLE', 'EXAMPLE', 'EXAMPLE', 'EXAMPLE']
>>> ['example'.upper()] * 5
['EXAMPLE', 'EXAMPLE', 'EXAMPLE', 'EXAMPLE', 'EXAMPLE']
Run Code Online (Sandbox Code Playgroud)
在任何情况下,它是最合适的解决方案吗?如果是这样,在什么情况下呢?
给定一个字符串,我想生成所有可能的组合.换句话说,将逗号放在字符串中的所有可能方法.
例如:
input: ["abcd"]
output: ["abcd"]
["abc","d"]
["ab","cd"]
["ab","c","d"]
["a","bc","d"]
["a","b","cd"]
["a","bcd"]
["a","b","c","d"]
Run Code Online (Sandbox Code Playgroud)
我有点坚持如何生成所有可能的列表.组合将只给出包含字符串集子集长度的列表,排列将提供所有可能的订购方式.
由于遍历切片,我可以在列表中只使用一个逗号来创建所有情况,但是我不能用两个逗号来表示例如"ab","c","d"和"a","b" ,"光盘"
我的尝试w/slice:
test="abcd"
for x in range(len(test)):
print test[:x],test[x:]
Run Code Online (Sandbox Code Playgroud) 我有一个列表列表,如我附上的代码.如果有任何常见值,我想链接每个子列表.然后,我想用列表的精简列表替换列表列表.示例: 如果我有一个[[1,2,3],[3,4]]我想要的列表[1,2,3,4].如果我有[[4,3],[1,2,3]]我想要的[4,3,1,2].如果我有[[1,2,3],[a,b],[3,4],[b,c]]我想要[[1,2,3,4],[a,b,c]]或者[[a,b,c],[1,2,3,4]]我不在乎哪一个.
我几乎在那里......
我的问题是,当我有一个像[[1,2,3],[10,5],[3,8,5]]我想要的情况,[1,2,3,10,5,8]但我得到了我当前的代码[1,2,3,8,10,5]
这是我的代码:
import itertools
a = [1,2,3]
b = [3,4]
i = [21,22]
c = [88,7,8]
e = [5,4]
d = [3, 50]
f = [8,9]
g= [9,10]
h = [20,21]
lst = [a,b,c,i,e,d,f,g,h,a,c,i]*1000
#I have a lot of list but not very many different lists
def any_overlap(a, b):
sb = set(b)
return any(itertools.imap(sb.__contains__, a))
def find_uniq(lst): …Run Code Online (Sandbox Code Playgroud) 从这篇文章我了解到你可以连接元组:
>>> tuples = (('hello',), ('these', 'are'), ('my', 'tuples!'))
>>> sum(tuples, ())
('hello', 'these', 'are', 'my', 'tuples!')
Run Code Online (Sandbox Code Playgroud)
这看起来很不错.但为什么这有效呢?并且,这是最优的,还是有一些东西itertools比这个结构更可取?
我们有两个列表,A和B:
A = ['a','b','c']
B = [1, 2]
Run Code Online (Sandbox Code Playgroud)
是否有一种pythonic方法来构建包含2 ^ n的A和B之间的所有映射集(此处为2 ^ 3 = 8)?那是:
[(a,1), (b,1), (c,1)]
[(a,1), (b,1), (c,2)]
[(a,1), (b,2), (c,1)]
[(a,1), (b,2), (c,2)]
[(a,2), (b,1), (c,1)]
[(a,2), (b,1), (c,2)]
[(a,2), (b,2), (c,1)]
[(a,2), (b,2), (c,2)]
Run Code Online (Sandbox Code Playgroud)
使用itertools.product,可以获得所有元组:
import itertools as it
P = it.product(A, B)
[p for p in P]
Run Code Online (Sandbox Code Playgroud)
这使:
Out[3]: [('a', 1), ('a', 2), ('b', 1), ('b', 2), ('c', 1), ('c', 2)]
Run Code Online (Sandbox Code Playgroud) 假设我们希望处理迭代器并希望通过块来处理它.
每个块的逻辑取决于先前计算的块,因此groupby()没有帮助.
在这种情况下,我们的朋友是itertools.takewhile():
while True:
chunk = itertools.takewhile(getNewChunkLogic(), myIterator)
process(chunk)
Run Code Online (Sandbox Code Playgroud)
问题是takewhile()需要经过满足新块逻辑的最后一个元素,因此"吃掉"下一个块的第一个元素.
有各种解决方案,包括包装或àC ungetc()等.
我的问题是:有一个优雅的解决方案吗?
我试图生成所有可能的方法来交错Python中的任意两个任意字符串.
例如:如果两个字符串是'ab'和'cd',我希望获得的输出是:
['abcd', 'acbd', 'acdb', 'cabd', 'cadb', 'cdab']
Run Code Online (Sandbox Code Playgroud)
a总是在b(c之前d)之前看到.我正在努力寻找解决方案.我尝试过如下所示的itertools:
import itertools
def shuffle(s,t):
string = s+t
for i in itertools.permutations(string):
print(''.join(i))
shuffle('ab','cd')
Run Code Online (Sandbox Code Playgroud)
但正如预期的那样,这将返回所有可能的排列,而忽略了a和b(c和d)的顺序.
我有一个元组列表
servers = [('server1', 80 , 1, 2), ('server2', 443, 3, 4)]
Run Code Online (Sandbox Code Playgroud)
我想创建一个只有前两个字段的新列表,如:
[('server1', 80), ('server2', 443)]
Run Code Online (Sandbox Code Playgroud)
但我看不出如何为多个元素制作列表理解.
hosts = [x[0] for x in servers] # this works to give me ['server1', server2']
hostswithports = [x[0], x[1] for x in servers] # this does not work
Run Code Online (Sandbox Code Playgroud)
我更喜欢学习使用循环的pythonic方式 - 我做错了什么?
python ×10
python-itertools ×10
permutation ×2
tuples ×2
algorithm ×1
dictionary ×1
list ×1
nested-lists ×1
python-2.x ×1
python-3.x ×1
sum ×1