我想做一些与列表中第一项不同的事情
for item in list:
# only if its the first item, do something
# otherwise do something else
答案 0 :(得分:7)
一些选择,按Pythonicity的降序排列:
for index, item in enumerate(lst): # note: don't use list
if not index: # or if index == 0:
# first item
else:
# other items
或者:
first = True
for item in lst:
if first:
first = False
# first item
else:
# other items
或者:
for index in range(len(lst)):
item = lst[i]
if not index:
# first item
else:
# other items
答案 1 :(得分:4)
do_something_with_first_item(lst[0])
for item in lst[1:]:
do_something_else(item)
或者:
is_first_item = True
for item in lst:
if is_first_item:
do_something_with_first_item(item)
is_first_item = False
else:
do_something_else(item)
不要将list
用作变量名,因为这会影响内置函数list()
。
jonrsharpe答案中基于enumerate
的解决方案优于此。您可能应该使用它。
答案 2 :(得分:3)
您可以使用iter()在列表上创建一个迭代器,然后在其上调用next()以获取第一个值,然后循环其余部分。我发现这是处理文件的一种非常优雅的方式,其中第一行是标题,其余是数据,即
list_iterator = iter(lst)
# consume the first item
first_item = next(list_iterator)
# now loop on the tail
for item in list_iterator:
print(item)
答案 3 :(得分:2)
使用您在处理第一个项目后更改的标志。例如:
first = True
for item in my_list:
if first:
# Processing unique to the first item
first = False
else:
# Processing unique to other items
# Shared processing
你也可以只处理第一项:
first = my_list.pop(0)
# Process first
for item in my_list:
# Process item
# Add the first item back to the list at the beginning
my_list.insert(0, first)
答案 4 :(得分:1)
jonrsharpe使用enumerate
的第一个版本简洁明了,适用于所有迭代:
for index, item in enumerate(lst):
if not index:
do_something_with_first_item(item)
else:
do_something_else(item)
senshin使用lst[0]
和lst[1:]
的第一个解决方案更简单,但仅适用于序列:
do_something_with_first_item(lst[0])
for item in lst[1:]:
do_something_else(item)
您可以直接使用迭代器来充分利用这两个世界:
it = iter(lst)
do_something_with_first_item(next(it))
for item in it:
do_something_else(item)
但是,尽管两者都是最好的,但它实际上并不是那么简单。如果你知道你有一个迭代器(所以你可以跳过第一行),或者你还需要一个做itertools
和genexpr以及类似的东西(这样的话),这只是明确值得做的事情。你已经要写第一行了。)在其他情况下是否值得做更多的是风格问题。
答案 5 :(得分:-1)
我最后检查了列表中的第一项
for item in list:
if item == list[0]:
#do stuff to the first
else:
#do stuff