2014-11-06 47 views
3

我有一个Python列表Python列表如下:分裂基于准则

mylist = [('Item A','CA','10'),('Item B','CT','12'),('Item C','CA','14')] 

我想将其分割成根据列2 ==“CA”列表

所需的输出:

filtered_list = [('Item A','CA','10'),('Item C','CA','14')] 

我尝试:很显然这里有一些问题!

mylist = [('Item A','CA','10'),('Item B','CT','12'),('Item C','CA','14')] 
filtered_list[] 
for row in mylist: 
    if [row:1] = 'CA' 
     filtered_list.append(mylist[row]) 
+1

是的,有一些问题。首先,您使用元组作为切片值,然后您不使用比较运算符'==',并且再次使用元组作为索引 – smac89 2014-11-06 04:38:41

回答

1

您可以使用列表解析来实现这一目标:

mylist = [('Item A','CA','10'),('Item B','CT','12'),('Item C','CA','14')] 

filtered_list = [item for item in mylist if item[1]=='CA'] 
+0

简单,效果很好! – user2242044 2014-11-06 04:49:33

+0

如果一个类似的条目已经存在某个标准,是否有可能不在新列表中包含一个值?例如,我只希望项目A的第3列是14的一个条目。 – user2242044 2014-11-06 05:45:49

1

您可以通过以下方式使用Python的过滤器用于此目的。

filtered_list = list(filter(lambda x: x[1] =='CA',mylist))) 
0

我不想写我自己的答案,我想指出你的错误在哪里解释。

mylist = [('Item A','CA','10'),('Item B','CT','12'),('Item C','CA','14')] 
filtered_list[]       ## I believe this was typo 
for row in mylist: 
    if [row:1] = 'CA'     ## this where you missed it! 
     filtered_list.append(mylist[row]) 

我已更正您的代码。

mylist = [('Item A','CA','10'),('Item B','CT','12'),('Item C','CA','14')] 
filtered_list = []      ## list created 
for row in mylist: 
    if row[1] == 'CA':     ## == for if condition and : 
     filtered_list.append(row)   ## appending the row if row[1] == "CA" 
print filtered_list 
+0

使用我自己的代码查看它非常有用,谢谢!这是一种低效率的做事方式吗? – user2242044 2014-11-06 04:54:26

+0

没有,除非你担心内存和执行时间。他人在这里提供的答案是编写相同功能的简洁方式。我认为你应该使用自己的代码,因为它可以很容易地进行调试。如果你打算使用任何其他代码,然后让你确定你了解它如何完成,然后继续前进:) – 2014-11-06 05:03:31