Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 你不能使用模吗?你知道一组3个元素中的第一个总是会出现零吗?如果没有,该三元组是否应包括在列表中?不,零可以出现在任何地方,如果字典包含零,则会丢弃该零,并终止循环。@Verawan,那么键的顺序如何?@PadraicCcningham,如图所示。@Ver_Python_List_Loops - Fatal编程技术网

Python 你不能使用模吗?你知道一组3个元素中的第一个总是会出现零吗?如果没有,该三元组是否应包括在列表中?不,零可以出现在任何地方,如果字典包含零,则会丢弃该零,并终止循环。@Verawan,那么键的顺序如何?@PadraicCcningham,如图所示。@Ver

Python 你不能使用模吗?你知道一组3个元素中的第一个总是会出现零吗?如果没有,该三元组是否应包括在列表中?不,零可以出现在任何地方,如果字典包含零,则会丢弃该零,并终止循环。@Verawan,那么键的顺序如何?@PadraicCcningham,如图所示。@Ver,python,list,loops,Python,List,Loops,你不能使用模吗?你知道一组3个元素中的第一个总是会出现零吗?如果没有,该三元组是否应包括在列表中?不,零可以出现在任何地方,如果字典包含零,则会丢弃该零,并终止循环。@Verawan,那么键的顺序如何?@PadraicCcningham,如图所示。@Verawan,这没有问题,检查dict大小始终会正常工作,takewhile还将获取不存在0的所有列表,因此无论发生什么情况,您都将得到正确的结果。重要的部分是dict的长度。你不能使用module。我不确定是否要根据@John的回答改变我的回答以



你不能使用模吗?你知道一组3个元素中的第一个总是会出现零吗?如果没有,该三元组是否应包括在列表中?不,零可以出现在任何地方,如果字典包含零,则会丢弃该零,并终止循环。@Verawan,那么键的顺序如何?@PadraicCcningham,如图所示。@Verawan,这没有问题,检查dict大小始终会正常工作,takewhile还将获取不存在0的所有列表,因此无论发生什么情况,您都将得到正确的结果。重要的部分是dict的长度。你不能使用module。我不确定是否要根据@John的回答改变我的回答以生成一系列dict:)这似乎就是这里的想法!我不确定是否要改变我的回答,根据@John的回答生成一个dict序列:)这似乎就是这里的想法!这创建了一个单独的dict@Padraic Cunningham谢谢..我想问题被修改了..我没有看到..谢谢..顺便说一句,你的答案是最优雅的,我会选择它作为Anwser这创建了一个单独的dict@Padraic Cunningham谢谢..我想问题被修改了..我没有看到..谢谢..顺便说一句,你的答案是最优雅的,我知道在你的第一个
groups
函数中会选择它作为anwserin,为什么它没有一个返回语句?@verawan,因为我们正在屈服,而每个dict的len等于
n
,或者我们只是打破循环,因为我们在末尾有一个dict,它没有三个元素,因为第一个0位于一个,不是3的倍数。您可以迭代
组(l,keys,0,3))
并动态获取每个dict,您不必调用list并将整个dict列表存储在内存中,这是使用生成器的优势。如果您想要具有
n
键的dict,您需要检查每个dict的长度,答案第二部分中的输入将在结尾处留下一个奇数长度的dict。我知道,奇怪的是,我试着运行您的代码:,这将在这里和我的机器上产生一个无限循环。@Verawan,是的,对不起,我没有添加任何解释,我只是想确保我们涵盖了所有情况,itertools库绝对值得花点时间熟悉。在您的第一个
函数中,为什么没有返回语句?@VeraWang,因为我们是屈服的,而每个dict的len等于
n
,或者我们只是打破循环,因为我们的dict末尾没有三个元素,因为第一个0位于一个不是3的倍数的索引处。您可以迭代
组(l,keys,0,3))
并动态获取每个dict,您不必调用list并将整个dict列表存储在内存中,这是使用生成器的优势。如果您想要具有
n
键的dict,您需要检查每个dict的长度,答案第二部分中的输入将在结尾处留下一个奇数长度的dict。我知道,奇怪的是,我试着运行您的代码:,这将在这里和我的机器上产生一个无限循环。@Verawan,是的,对不起,我没有添加任何解释,我只是想确保我们涵盖了所有情况,itertools库绝对值得花一些时间熟悉。
from collections import defaultdict


def f(xs, labels=("gold", "silver", "bronze")):
    d = defaultdict(int)
    n = 0
    for i, x in enumerate(xs):
        if x == 0:  # break if we see a 0
            return d

        d[labels[n]] += i  # update our counts

        # cycle through gold/silver/bronze (labels)
        n += 1
        if n % 3 == 0:
            n = 0

    return d


xs = [1, 2, 3, 4, 5, 6, 0, 9, 2]
d = f(xs)
print d
$ python foo.py 
defaultdict(<type 'int'>, {'bronze': 7, 'silver': 5, 'gold': 3})
from itertools import cycle

placings = cycle(['gold', 'silver', 'bronze'])
numbers = [1,2,3,4,5,6,0,9,2]

def zipper(numbers, placings):

    d = {}

    for n, c in zip(numbers, placings):

        if n == 0:
            break

        d[n] = c

        if n % 3 == 0:
            yield d
            d = {}

print list(zipper(numbers, placings))
listOfDictionary = []
lst = [1,2,3,4,5,6,0,9,2]

ind = lst.index(0)   #Tells where to break the iteration loop.

medals = ["gold", "silver", "bronze"]

if ind%3==0:

    newlst = [lst[i: i+3]for i in xrange(0,ind,3)]
    #newlst = [[1, 2, 3], [4, 5, 6]]

    for lsst in newlst:
        listOfDictionary.append(dict(zip(medals, lsst)))


print listOfDictionary
>>> [{'bronze': 3, 'silver': 2, 'gold': 1}, {'bronze': 6, 'silver': 5, 'gold': 4}]
In [61]: mykeys
Out[61]: [1, 2, 3, 4, 5, 6, 0, 9, 2]

In [63]: mykeys1=[i for i in mykeys[:-1 if 0 not in mykeys else mykeys.index(0)]]

In [64]: myvalues
Out[64]: ['gold', 'silver', 'bronze']

In [66]: myvalues1=cycle(myvalues)

In [67]: mydict=dict(zip(mykeys1,myvalues1))

In [68]: mydict
Out[68]: {1: 'gold', 2: 'silver', 3: 'bronze', 4: 'gold', 5: 'silver', 6: 'bronze'}
In [69]: [dict(mydict.items()[i:i+3]) for i in range(0,len(mykeys1),3)]
Out[69]: [{1: 'gold', 2: 'silver', 3: 'bronze'}, {4: 'gold', 5: 'silver', 6: 'bronze'}]
from itertools import takewhile, islice


def groups(l, keys, i, n):
    # lambda x: x != 0 -> take elements until we encounter any 0
    tk = takewhile(lambda x: x != i, l)
    while True:
        d = dict(zip(keys, islice(tk, n)))
        if len(d) == n: # make sure we have n keys in the dict
            yield d
        else: 
            break

keys = ['gold', 'silver', 'bronze']
print(list(groups(l,keys,0,3)))
[{'bronze': 3, 'gold': 1, 'silver': 2}, {'bronze': 6, 'gold': 4, 'silver': 5}]
from itertools import takewhile, islice,chain

def groups(l, keys, i, n):
    tk = takewhile(lambda x: x != i, l)
    return (dict(zip(keys, chain(islice(tk, n - 1),(i,)))) for i in tk)
In [5]: l = [1, 2, 3, 4, 5, 6, 7, 11, 6, 9, 0, 2]

In [6]: list(groups(l,['gold', 'silver', 'bronze'],0,3))
Out[6]: 
[{'bronze': 1, 'gold': 2, 'silver': 3},
 {'bronze': 4, 'gold': 5, 'silver': 6},
 {'bronze': 7, 'gold': 11, 'silver': 6},
 {'gold': 9}]
def groups(l, keys, i, n):
    tk = takewhile(lambda x: x != i, l)
    return filter(lambda x: len(x) == n, (dict(zip(keys, chain(islice(tk, n - 1),(i,)))) 
                                          for i in tk))
In [8]: list(groups(l,['gold', 'silver', 'bronze'],0,3))
Out[8]: 
[{'bronze': 1, 'gold': 2, 'silver': 3},
 {'bronze': 4, 'gold': 5, 'silver': 6},
 {'bronze': 7, 'gold': 11, 'silver': 6}]