我是Python的新手,我遇到了一些障碍。我使用的是python 3,我有以下代码:
from collections import deque
databases=input("Enter databases: ")
db_list = deque(databases.split())
node1list = []
node2list = []
node3list = []
numDatabases = len(db_list)
while len(db_list) > 0:
if len(db_list) > 0:
node1list.append(db_list.popleft())
if len(db_list) > 0:
node2list.append(db_list.popleft())
if len(db_list) > 0:
node3list.append(db_list.popleft())
print("Paste the following in Node 1's file")
print("--------------------------------------------")
print("[[INSTANCE]")
print("# Keep a blank space after the colon character.")
print("#")
print("group1:", end="")
for db in node1list:
print(" " + db, end="")
print("\n\nPaste the following in Node 2's file")
print("--------------------------------------------")
print("[[INSTANCE]")
print("# Keep a blank space after the colon character.")
print("#")
print("group1: ", end="")
for db in node2list:
print(" " + db, end="")
print("\n\nPaste the following in Node 3's file")
print("--------------------------------------------")
print("[[INSTANCE]")
print("# Keep a blank space after the colon character.")
print("#")
print("group1: ", end="")
for db in node3list:
print(" " + db, end="")
当我运行代码时,我得到如下输出:
Enter databases: one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo twentythree twentyfour twentyfive twentysix twentyseven twentyeight twentynine thirty thirtyone thirtytwo thirtythree thirtyfour
----------------------------------------------------------------------------------------------
Paste the following in Node 1's file
--------------------------------------------
[[INSTANCE]
# Keep a blank space after the colon character.
#
group1: one four seven ten thirteen sixteen nineteen twentytwo twentyfive twentyeight thirtyone thirtyfour
Paste the following in Node 2's file
--------------------------------------------
[[INSTANCE]
# Keep a blank space after the colon character.
#
group1: two five eight eleven fourteen seventeen twenty twentythree twentysix twentynine thirtytwo
Paste the following in Node 3's file
--------------------------------------------
[[INSTANCE]
# Keep a blank space after the colon character.
#
group1: three six nine twelve fifteen eighteen twentyone twentyfour twentyseven thirty thirtythree
但是我需要group1最多只占用5个数据库,然后自动开始将它们插入group2。每个组最多只能容纳5个数据库。此外,数据库的数量可能远远超过34(该数字是未知变量),因此我需要能够不断增加组的数量来补偿这个未知变量。
所以我希望输出看起来像这样:
Enter databases: one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone twentytwo twentythree twentyfour twentyfive twentysix twentyseven twentyeight twentynine thirty thirtyone thirtytwo thirtythree thirtyfour
----------------------------------------------------------------------------------------------
Paste the following in Node 1's file
--------------------------------------------
[[INSTANCE]
# Keep a blank space after the colon character.
#
group1: one four seven ten thirteen
group2: sixteen nineteen twentytwo twentyfive twentyeight
group3: thirtyone thirtyfour
Paste the following in Node 2's file
--------------------------------------------
[[INSTANCE]
# Keep a blank space after the colon character.
#
group1: two five eight eleven fourteen
group2: seventeen twenty twentythree twentysix twentynine
group3: thirtytwo
Paste the following in Node 3's file
--------------------------------------------
[[INSTANCE]
# Keep a blank space after the colon character.
#
group1: three six nine twelve fifteen
group2: eighteen twentyone twentyfour twentyseven thirty
group3: thirtythree
但我完全不知道如何做到这一点。我认为这可以通过我的while循环中的嵌套for循环实现,但我还没有能够得到我需要的结果。我不确定我是不是只是在考虑事情,或者我只是需要休息一下。有什么建议可以帮助我吗?
答案 0 :(得分:1)
如果我正确理解您的问题,这只是一个分成块的简单项目列表。使用funcy:
>>> from funcy import chunks
>>> s = "one two three four five six seven eight nine ten eleven"
>>> databases = chunks(5, s.split())
>>> databases
[['one', 'two', 'three', 'four', 'five'], ['six', 'seven', 'eight', 'nine', 'ten'], ['eleven']]
>>> databases[0]
['one', 'two', 'three', 'four', 'five']
>>> databases[1]
['six', 'seven', 'eight', 'nine', 'ten']
>>> databases[2]
['eleven']
>>> len(databases[0])
5
>>> len(databases[1])
5
>>> len(databases[2])
1
然后可以像这样重写您的代码:
#!/usr/bin/env python
from __future__ import print_function
from funcy import chunks
s = raw_input("Enter databases: ")
nodes = chunks(5, s.split())
for i, node in enumerate(nodes):
print("Paste the following in Node 1's file")
print("--------------------------------------------")
print("[[INSTANCE]")
print("# Keep a blank space after the colon character.")
print("#")
print("group{0:d}:".format(i), end="")
for db in node:
print(" " + db, end="")
使用以下示例输出:
$ python bar.py
Enter databases: a b c d e f g h i j k l m n o p q r s t u v w x y z
Paste the following in Node 1's file
--------------------------------------------
[[INSTANCE]
# Keep a blank space after the colon character.
#
group0: a b c d ePaste the following in Node 1's file
--------------------------------------------
依旧......
<强>更新强>
顺便说一下,你可以像这样实现chunks
:
def chunks(l, n):
""" Yield successive n-sized chunks from l.
"""
for i in xrange(0, len(l), n):
yield l[i:i+n]
借鉴
答案 1 :(得分:1)
如果您想更正代码的逻辑,而不是使用任何额外的模块,那么只需更改您的while循环块,如下所示
i = 0
node1list = [[]]
node2list = [[]]
node3list = [[]]
while len(db_list) > 0:
if len(node1list[i]) < 5:
node1list[i].append(db_list.pop(0))
elif len(node2list[i]) < 5:
node2list[i].append(db_list.pop(0))
elif len(node3list[i]) < 5:
node3list[i].append(db_list.pop(0))
else:
node1list.append([])
if len(db_list) > 5:
node2list.append([])
if len(db_list) > 10:
node3list.append([])
i += 1