python randomize保留每3个项目(列表列表?)

时间:2015-02-13 21:31:14

标签: python list

我有一个如下所示的列表:

important stuff = [1, 1, '539287_640214358329_682457984_n.jpg', 
1, 2, '10273290_745672065239_6510327149011099172_o.jpg', 
1, 3,'196453_640214498049_2103349152_n.jpg', 
1, 4, '1277816_699439470729_877539164_o.jpg', 
1, 5, '10682279_777090163119_2043260231272895742_o.jpg', 
1, 6,'736323_656687181659_1199237329_o.jpg', 
1, 7, '185184_640214403239_1313590472_n.jpg', 
1, 8, '1898786_730004488189_837817798_o.jpg']

我需要一种方法来改变它保持"行" (又称每3个值)不变。这两个数字需要与相同的.jpg保持关联。

这是创建列表列表的最佳方法吗?那会怎么样?我找到了从列表列表中创建平面列表的答案,但我需要朝着相反的方向前进。

2 个答案:

答案 0 :(得分:1)

import random

# list of lists
data = [data[x:x+3] for x in range(0, len(data),3)]
# shuffle.
random.shuffle(data,random.random)

# OR keep them in dictionary with filename as key.
foo = {}
for i in data:
    foo[i[2]] = i[:2]
print foo

这是你的选择 我个人会把它保存为字典,以便快速查找和组织。

答案 1 :(得分:1)

列表列表可能是处理此问题的更简单方法之一。假设您的初始列表已根据您的描述(两个数字到一个字符串)正确格式化,您可以执行以下操作:

from random import shuffle
listOfLists = []
for i in range(0,len(importantStuff)/3):
    listOfLists.append([importantStuff[i*3+0],importantStuff[i*3+1],importantStuff[i*3+2]])
shuffle(listOfLists)

singleList = listOfLists[0]
singleItem = listOfLists[0][2]

对于更一般的情况,使用变量而不是硬编码值