当它是列表中的第一项时,大多数pythonic方式做某事

时间:2014-01-08 21:08:57

标签: python list loops

我想做一些与列表中第一项不同的事情

for item in list:
    # only if its the first item, do something

    # otherwise do something else

6 个答案:

答案 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