Python 从元组列表创建一个列表
我有这样一份清单:Python 从元组列表创建一个列表,python,list,tuples,Python,List,Tuples,我有这样一份清单: mylist = [(20, 'Start', '2008-10-10', 'TBS'),...,(20, 'End', '2008-11-09', 'NG'), (21, 'Start', '2008-12-10', 'TBS'),...,(21, 'End', '2008-12-15', 'G'), (22, 'Start', '2009-01-10', 'TBS'),...,(22, 'End', '2009-12-10',
mylist = [(20, 'Start', '2008-10-10', 'TBS'),...,(20, 'End', '2008-11-09', 'NG'),
(21, 'Start', '2008-12-10', 'TBS'),...,(21, 'End', '2008-12-15', 'G'),
(22, 'Start', '2009-01-10', 'TBS'),...,(22, 'End', '2009-12-10', 'B'),..]
[[20, 'Start', '2008-10-10', 'End', '2008-11-09', 'NG'] ,
[21, 'Start', '2008-12-10', 'End', '2008-12-15', 'G'],
[22, 'Start', '2009-01-10', 'End', '2009-12-10', 'B']]
[[[20, 'Start', '2008-10-10', 'End'], ['2008-11-09', 'NG']] ,
[[20, 'Start', '2008-10-10', 'End'], ['2008-11-09', 'NG']] ,
[[20, 'Start', '2008-10-10', 'End'], ['2008-11-09', 'NG']] ,
[[21, 'Start', '2008-12-10', 'End'], ['2008-12-15', 'G']],
[[21, 'Start', '2008-12-10', 'End'], ['2008-12-15', 'G']],
[[22, 'Start', '2009-01-10', 'End'], ['2009-12-10', 'B']]]
code = 0
brr = []
for row in mylist:
if row[1] == "Start":
arr = []
code = row[0]
arr.extend([row[0], row[1], row[2]])
# continue not needed here
if row[0] == code and row[1] == "End":
arr.extend([row[1], row[2], row[3]])
if arr not in brr:
brr.append(arr)
for k in brr:
print(k)
我在上面的例子中加上“…”表示每个id都有其他项,比如列表中的20、21和22,但我不想要它们。我想要的唯一项目是包含“开始”或“结束”的项目。(其他项目的单词与这两个词不同。)
我想创建一个嵌套列表,如下所示:
mylist = [(20, 'Start', '2008-10-10', 'TBS'),...,(20, 'End', '2008-11-09', 'NG'),
(21, 'Start', '2008-12-10', 'TBS'),...,(21, 'End', '2008-12-15', 'G'),
(22, 'Start', '2009-01-10', 'TBS'),...,(22, 'End', '2009-12-10', 'B'),..]
[[20, 'Start', '2008-10-10', 'End', '2008-11-09', 'NG'] ,
[21, 'Start', '2008-12-10', 'End', '2008-12-15', 'G'],
[22, 'Start', '2009-01-10', 'End', '2009-12-10', 'B']]
[[[20, 'Start', '2008-10-10', 'End'], ['2008-11-09', 'NG']] ,
[[20, 'Start', '2008-10-10', 'End'], ['2008-11-09', 'NG']] ,
[[20, 'Start', '2008-10-10', 'End'], ['2008-11-09', 'NG']] ,
[[21, 'Start', '2008-12-10', 'End'], ['2008-12-15', 'G']],
[[21, 'Start', '2008-12-10', 'End'], ['2008-12-15', 'G']],
[[22, 'Start', '2009-01-10', 'End'], ['2009-12-10', 'B']]]
code = 0
brr = []
for row in mylist:
if row[1] == "Start":
arr = []
code = row[0]
arr.extend([row[0], row[1], row[2]])
# continue not needed here
if row[0] == code and row[1] == "End":
arr.extend([row[1], row[2], row[3]])
if arr not in brr:
brr.append(arr)
for k in brr:
print(k)
这是我的密码:
code = 0
brr = []
for row in myList:
if row[1] == "Start":
arr = []
code = row[0]
arr.append([row[0], row[1], row[2]])
continue
if row[0] == code and row[1] == "End":
arr.append([row[1], row[2], row[3]])
brr.append(arr)
for k in brr:
print(k)
但问题是它产生了这样的东西:
mylist = [(20, 'Start', '2008-10-10', 'TBS'),...,(20, 'End', '2008-11-09', 'NG'),
(21, 'Start', '2008-12-10', 'TBS'),...,(21, 'End', '2008-12-15', 'G'),
(22, 'Start', '2009-01-10', 'TBS'),...,(22, 'End', '2009-12-10', 'B'),..]
[[20, 'Start', '2008-10-10', 'End', '2008-11-09', 'NG'] ,
[21, 'Start', '2008-12-10', 'End', '2008-12-15', 'G'],
[22, 'Start', '2009-01-10', 'End', '2009-12-10', 'B']]
[[[20, 'Start', '2008-10-10', 'End'], ['2008-11-09', 'NG']] ,
[[20, 'Start', '2008-10-10', 'End'], ['2008-11-09', 'NG']] ,
[[20, 'Start', '2008-10-10', 'End'], ['2008-11-09', 'NG']] ,
[[21, 'Start', '2008-12-10', 'End'], ['2008-12-15', 'G']],
[[21, 'Start', '2008-12-10', 'End'], ['2008-12-15', 'G']],
[[22, 'Start', '2009-01-10', 'End'], ['2009-12-10', 'B']]]
code = 0
brr = []
for row in mylist:
if row[1] == "Start":
arr = []
code = row[0]
arr.extend([row[0], row[1], row[2]])
# continue not needed here
if row[0] == code and row[1] == "End":
arr.extend([row[1], row[2], row[3]])
if arr not in brr:
brr.append(arr)
for k in brr:
print(k)
对于每个项目,我在列表中有多行。我不知道为什么?
如果我的问题太长,很抱歉。您需要使用arr.extend()函数
您的brr.append(arr)
总是为每行添加一个数组,这就是为什么输出中有6个元素。将brr.append(arr)
更改为:
if arr not in brr:
brr.append(arr)
至于格式,arr.append([row[0],row[1],row[2]])
添加了一个包含3个元素的列表,而不是3个单独的元素。改用
您的最终代码应该如下所示:
mylist = [(20, 'Start', '2008-10-10', 'TBS'),...,(20, 'End', '2008-11-09', 'NG'),
(21, 'Start', '2008-12-10', 'TBS'),...,(21, 'End', '2008-12-15', 'G'),
(22, 'Start', '2009-01-10', 'TBS'),...,(22, 'End', '2009-12-10', 'B'),..]
[[20, 'Start', '2008-10-10', 'End', '2008-11-09', 'NG'] ,
[21, 'Start', '2008-12-10', 'End', '2008-12-15', 'G'],
[22, 'Start', '2009-01-10', 'End', '2009-12-10', 'B']]
[[[20, 'Start', '2008-10-10', 'End'], ['2008-11-09', 'NG']] ,
[[20, 'Start', '2008-10-10', 'End'], ['2008-11-09', 'NG']] ,
[[20, 'Start', '2008-10-10', 'End'], ['2008-11-09', 'NG']] ,
[[21, 'Start', '2008-12-10', 'End'], ['2008-12-15', 'G']],
[[21, 'Start', '2008-12-10', 'End'], ['2008-12-15', 'G']],
[[22, 'Start', '2009-01-10', 'End'], ['2009-12-10', 'B']]]
code = 0
brr = []
for row in mylist:
if row[1] == "Start":
arr = []
code = row[0]
arr.extend([row[0], row[1], row[2]])
# continue not needed here
if row[0] == code and row[1] == "End":
arr.extend([row[1], row[2], row[3]])
if arr not in brr:
brr.append(arr)
for k in brr:
print(k)
您也可以通过以下方式轻松实现这一目标: 输出:
[[20, 'Start', '2008-10-10', 'End', '2008-11-09', 'NG'],
[21, 'Start', '2008-12-10', 'End', '2008-12-15', 'G'],
[22, 'Start', '2009-01-10', 'End', '2009-12-10', 'B']]
请试试这个
startlist=[]
endlist=[]
for item in mylist:
if 'Start' in list(item):
startlist.append(list(item))
elif 'End' in list(item):
endlist.append(list(item))
outlist=[i+j for i,j in zip(startlist,endlist)]
开始和结束是否始终是行的第一个和最后一个元素?不,myList是许多元组的列表。但开始总是在结束之前@用户4343502在每个元组中,开始和结束是否出现一次且仅出现一次?此外,您删除了
TBS
,这是有意的吗?对于每个元组,只有一个单词。我想说,如果它是start,那么将它存储到一个列表中,然后忽略其他单词,我应该搜索特定代码的end,并将其保存在与start相同的列表中@user4343502@TemporalWolf:arr.append
只接受一个参数<代码>arr.append(1,2)无效。完美!我在这里工作。但我仍然有多行的每一个项目,我不知道为什么@卡佩尔·弗洛里安斯基只是说。。。brr.append(arr)
将arr
添加到brr
每个循环迭代中。您迭代了6个元组,因此您将在输出中添加6个元素。太棒了!谢谢