基于条件分割Python列表

3

我有一个Python列表,如下所示:

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

我希望将其基于第二列 == '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
3个回答

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

如果类似的条目已经存在,是否可以在新列表中不包含某个值?例如,我只想要一个列3为14的A项。 - user2242044

1
您可以使用Python的filter来实现此目的,方法如下。
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

用自己的代码亲眼看到这一点非常有用,谢谢! 这种做事方式是否低效? - user2242044
不需要,除非你担心内存和执行时间。其他人提供的答案是编写相同功能的简洁方式。我认为你应该使用自己的代码,因为这样更容易调试。如果你计划使用其他代码,请确保你理解它是如何实现的,然后再继续 :) - d-coder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接