Python - 从列表中删除列表

时间:2017-12-04 01:10:53

标签: python python-3.x

我有一个列表,我想从中删除一个列表,以便我可以得到所需的答案。

list = [["hello","son", 52],["welcome","home",65],["good","work",6]]
name = input("Name: ")
if name in list:
    del list[name]
    print("name + " deleted")
else:
    print("invalid name")

如何删除列表以便我得到这个答案:

list = [["hello", "son", 52], ["good", "work", 6]]

然后添加一个新列表以获得此结果:

list = [["hello", "son", 52], ["good", "work", 6],["see","you","soon"]]

6 个答案:

答案 0 :(得分:0)

您需要遍历列表,因为用于评估条件的键位于子列表中。

mylist = [["hello","son", 52],["welcome","home",65],["good","work",6]]
name = 'hello' # 'son' would also work
for i, sub_list in enumerate(mylist):
        if name in sub_list:
                del mylist[i]
                print(name + " deleted")
                break

print(mylist)

对于给定的示例,您要为名称指定一堆属性;我会考虑使用字典作为键。

答案 1 :(得分:0)

我的建议是使用嵌套的while循环遍历列表列表!检查您要求的“名称”是否出现在列表的索引处,如果是,请使用“[x [y]”位置弹出或删除它(取决于您要对旧的名称执行操作) /新名单。根据你的措辞,我有点不清楚。

希望有所帮助!

答案 2 :(得分:0)

将索引替换为要在搜索中使用的元素。 (我假设指数= 1)

>>> list = [["hello","son", 52],["welcome","home",65],["good","work",6]]
>>> name="home"
>>> list
[['hello', 'son', 52], ['welcome', 'home', 65], ['good', 'work', 6]]
>>> list = [rec for rec in list if rec[1] != name]
>>> list
[['hello', 'son', 52], ['good', 'work', 6]]

建议将Dictionary用于此类数据。

答案 3 :(得分:0)

为什么不使用lambda函数filter()而不是循环?看看:

>>> l = [["hello","son", 52],["welcome","home",65],["good","work",6]]
>>> name = "home"
>>> filter(lambda sub_list: name not in sub_list, l)
[['hello', 'son', 52], ['good', 'work', 6]]
>>>

https://docs.python.org/2/library/functions.html#filter了解有关filter()的更多信息。希望这会有所帮助。

修改

没有看到关于添加其他列表以获得第二个答案的最后一个问题。尝试使用append()方法。

>>> l = [["first", "list"]]
>>> m = ["second", "list"]
>>> l.append(m)
>>> l
[['first', 'list'], ['second', 'list']]
>>>

答案 4 :(得分:0)

不要将列表用作变量名称,它是一种类型。

您可以简单地使用一个函数,并使用两个参数列表中的一个参数和另一个您想要删除的词。

list_1 = [["hello","son", 52],["welcome","home",65],["good","work",6]]

def deleting(list_1,del_name):
    for sub_list in list_1:
        if del_name in sub_list:
            list_1.remove(sub_list)
    return list_1
print(deleting(list_1,'hello'))

输出:

[['welcome', 'home', 65], ['good', 'work', 6]]

正如你评论的那样:

如果我们使用name作为输入变量,如name = input(“输入名称:”)。。title()是否可以删除列表中的列表和上面相同的输出

以下是更新的解决方案:

list_1 = [["hello","son", 52],["welcome","home",65],["good","work",6]]

def deleting(list_1):
    del_name=input("Enter name: ")
    for sub_list in list_1:
        if del_name in sub_list:
            list_1.remove(sub_list)
    return list_1
print(deleting(list_1))

输出:

Enter name: hello
[['welcome', 'home', 65], ['good', 'work', 6]]

答案 5 :(得分:0)

如果要从列表列表中删除此索引列表,则应通过for和while循环进行尝试:

Index=[1,4,6,9]

列表列表:

Coordinates=[[2,3,4,5],[6,7,8,9],[10,11,12,13],[14,15,16,17],[18,19,20,21],[22,23,24,25],[26,27,28,29],[30,31,32,33],[34,35,36,37],[38,39,40,41]]

输出为:

Coordinates=[[2,3,4,5],[10,11,12,13],[14,15,16,17],[22,23,24,25],[30,31,32,33],[34,35,36,37]]

我使用以下代码: 第一类索引列表:

sorted(Index)
while(len(Index)>0):
    del Coordinates[Index[0]]
    del Index[0]
    for i in range(len(Index)):
        Index[i]-=1
print(Coordinates)