python动态拆分列表

时间:2015-07-08 11:27:02

标签: python

我正在尝试根据列表中的元素数生成链接。我有一个包含大量运费ID的列。 我将此列复制到列表 id_list
接下来,我从此列表中创建了一个字符串 str2 ,并将其与其他2个字符串连接以创建链接。并将其写入文件。

现在我想将列表拆分为较小的列表,每个列表包含400个元素。并为每个子列表生成单独的链接。但我无法拆分此列表。这该怎么做?

注意:id_list中的元素数量每天都在变化,因此我需要根据元素的数量动态生成链接。

我的代码:

conn = sqlite3.connect('Unicommerce.db')
cur = conn.cursor()
temp_list = []
id_list = []
cur.execute("""Select shipment from unicom;""")
rows = cur.fetchall()
for row in rows:
    temp_list.append(row)

for sublist in temp_list:
    for element in sublist:
        id_list.append(element)

str1 = "abc.com/oms/shipment/show/"
str2 = '-'.join([str(num) for num in id_list])
str3 = "?legacy=1"
link_str = str1 + str2 + str3
file = open("Shipment.txt","wb")
file.writelines(link_str)
file.close()
conn.commit()
conn.close()

2 个答案:

答案 0 :(得分:3)

使用修改后的代码版本的列表理解将起作用:

str1 = "abc.com/oms/shipment/show/"
str3 = "?legacy=1"
n=400
link_strings = [str1 + '-'.join([str(num) for num in id_list[i:i+n]]) + str3 for i in xrange(0, len(id_list), n)]

更改n的值以更改块大小。

以下是使用较小分块大小的简明示例:

id_list=range(10)

id_list
Out[2]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

str1 = "abc.com/oms/shipment/show/"
str3 = "?legacy=1"
n=4
link_strings = [str1 + '-'.join([str(num) for num in id_list[i:i+n]]) + str3 for i in xrange(0, len(id_list), n)]


link_strings
Out[4]: 
['abc.com/oms/shipment/show/0-1-2-3?legacy=1',
 'abc.com/oms/shipment/show/4-5-6-7?legacy=1',
 'abc.com/oms/shipment/show/8-9?legacy=1']

答案 1 :(得分:1)

>>> map(None, *[iter([1,2,3,4,5,6,7,8])]*3)
[(1, 2, 3), (4, 5, 6), (7, 8, None)]

您可以替换 id_list 的列表,并为 400 替换 3 的列表。