2015-07-08 2 views
-1

Я пытаюсь создать ссылки на основе количества элементов из списка. У меня есть столбец, содержащий множество идентификаторов доставки. Я скопировал этот столбец в список id_list.
Далее я создал строку str2 из этого списка и присоединился к ней двумя другими строками, чтобы создать ссылку. и записать его в файл.python Сплит-список динамически

Теперь я хочу разбить список на более мелкие списки, каждый из которых содержит 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() 

ответ

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)] 

Изменить значение п, чтобы изменить размер порции.

Вот сгущенный пример с использованием меньшего размера отрывов:

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'] 
+0

Это может легко привести к ошибке из 'id_list [i: i + n]'. –

+0

@ KassymDorsel вы могли бы привести пример, когда он выходит за пределы? Это понимание списка отлично работает для id_list разных размеров. – khammel

+0

@KassymDorsel: 'id_list [i: i + n]' не может генерировать IndexError. Даже '[1,2,3] [200: 400]' просто возвращает пустой список. – DSM

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

Вы можете заменить список для ID_LIST и номера для .

Смежные вопросы