在Python中从列表中删除第5和第7个元素

在Python中从列表中删除第5和第7个元素,python,list,Python,List,我是python新手 问题是编写一个函数,它接受10个项的列表并删除第5和第7个元素。该函数应该将剩余的列表转换为元组 我试过了,得到了输出: x = int(raw_input("Please Enter The Number: ")) items = [raw_input('Enter The List of Items: ' ) for i in range(x)] del items[5:7] print items 请帮我解决这个问题。您可以使用列表理解: print([ite

我是python新手

问题是编写一个函数,它接受10个项的列表并删除第5和第7个元素。该函数应该将剩余的列表转换为元组

我试过了,得到了输出:

x = int(raw_input("Please Enter The Number: "))

items = [raw_input('Enter The List of Items: ' ) for i in range(x)]

del items[5:7]

print items

请帮我解决这个问题。

您可以使用列表理解:

print([items[i] for i in range(len(items)) if i not in (4,6)])
列表的理解在上有很好的记录。列表理解由括号组成,括号中包含表达式,后跟for子句,然后是零个或多个for或if子句

结果将是一个新的列表,因此如果内存问题,那么只需按正确的顺序删除项目;i、 e.按相反顺序:

del items[6]
del items[4]
最后,在您的特殊情况下,您可以:

del items[4:7:2]

slice函数在上有详细的说明。

使用从列表中删除项目

del items[x] # x - list index, starting with 0

将删除列表的一部分,这不是您要查找的内容。所以,只要调用del两次,就需要索引了。 要从列表创建元组,只需使用

new_var = tuple(items)

您应该返回给定序列的元组,并删除第5个和第7个:

def fifth_and_seventh_removed(lst):
    lst = list(lst)
    del lst[6]
    del lst[4]  # order matters!
    return tuple(lst)
如果在del lst[4]后面加上del lst[6],那么将删除第五个和第八个元素,很明显,why部分留给读者作为练习

或者,对于函数方法,使用枚举和生成器表达式:

def tuple_with_elements_removed(l, to_remove=(5, 7)): 
    """Return a copy of a iterable with certain elements removed
       (whose ordinals are in the to_remove); by default 
       5th and 7th elements are removed:"""

    to_remove = set(to_remove)
    return tuple(e for i, e in enumerate(l, 1) if i not in to_remove)
现在,

从列表中删除最高索引。 使用元组将列表转换为元组。 e、 g

代码:

输出:

:~/study$ python test.py 
Please Enter The Number: 10
Enter The List of Items: 1
Enter The List of Items: 2
Enter The List of Items: 3
Enter The List of Items: 4
Enter The List of Items: 5
Enter The List of Items: 6
Enter The List of Items: 7
Enter The List of Items: 8
Enter The List of Items: 9
Enter The List of Items: 10
User Input:- ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
After deleting 7th element:- ['1', '2', '3', '4', '5', '6', '8', '9', '10']
After deleting 5th element:- ['1', '2', '3', '4', '6', '8', '9', '10']
Tuple:- ('1', '2', '3', '4', '6', '8', '9', '10')

索引从0开始,按您删除第6项和第7项的方式。您需要删除项目[4],项目[6]项目5和6,即第6和第7个元素;是的,它必须是del items[6],items[4]。可能是重复的。您可能需要解释代码中发生了什么,代码格式也有帮助:谢谢您的建议@kontur。我把提交按钮按得有点快,现在我被否决了。哦,亲爱的。这里是一个向上的投票:不过,一些关于你在一行程序中使用的那些结构的解释可能会有帮助。谢谢@kontur,我链接到文档并添加了额外的解决方案。你必须先删除第7项,然后删除第5项,否则你将删除之前的第8项!很好的解释性回答:
def tuple_with_elements_removed(l, to_remove=(5, 7)): 
    """Return a copy of a iterable with certain elements removed
       (whose ordinals are in the to_remove); by default 
       5th and 7th elements are removed:"""

    to_remove = set(to_remove)
    return tuple(e for i, e in enumerate(l, 1) if i not in to_remove)
>>> print(remove_elements(range(1, 10))
(1, 2, 3, 4, 6, 8, 9) 
x = int(raw_input("Please Enter The Number: "))
items = [raw_input('Enter The List of Items: ' ) for i in range(x)]
print "User Input:-", items
del items[6]
print "After deleting 7th element:-", items
del items[4]
print "After deleting 5th element:-", items
items = tuple(items)
print "Tuple:-", items
:~/study$ python test.py 
Please Enter The Number: 10
Enter The List of Items: 1
Enter The List of Items: 2
Enter The List of Items: 3
Enter The List of Items: 4
Enter The List of Items: 5
Enter The List of Items: 6
Enter The List of Items: 7
Enter The List of Items: 8
Enter The List of Items: 9
Enter The List of Items: 10
User Input:- ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
After deleting 7th element:- ['1', '2', '3', '4', '5', '6', '8', '9', '10']
After deleting 5th element:- ['1', '2', '3', '4', '6', '8', '9', '10']
Tuple:- ('1', '2', '3', '4', '6', '8', '9', '10')