python如何高效地遍历lis中的几个元素

2024-04-23 12:12:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个很长的列表,在其中我想取代字符串。下面我用一个简单的例子来说明我的问题。你知道吗

my_list = ['a7_1_1', 'a7_2_1', 'a7_3_1','a7_1_2', 'a7_2_2', 'a7_3_2','a7_1_3', 'a7_2_3', 'a7_3_3']


Out[12]:
['a7_1_1',
 'a7_2_1',
 'a7_3_1',
 'a7_1_2',
 'a7_2_2',
 'a7_3_2',
 'a7_1_3',
 'a7_2_3',
 'a7_3_3'

我想用添加到前3个字符串的后缀来替换字符串,因此最终列表应该如下所示:

my_new_list = ['a7_1_1', 'a7_2_1', 'a7_3_1','a7_1_1.1', 'a7_2_1.1', 'a7_3_1.1','a7_1_1.2', 'a7_2_1.2', 'a7_3_1.2']


Out[15]:
['a7_1_1',
 'a7_2_1',
 'a7_3_1',
 'a7_1_1.1',
 'a7_2_1.1',
 'a7_3_1.1',
 'a7_1_1.2',
 'a7_2_1.2',
 'a7_3_1.2']

有什么简单的方法吗?你知道吗


Tags: 方法字符串列表newmyout后缀list
2条回答

我不太明白你的意思。检查是否要执行此操作:

>>> my_list = ['a7_1_1', 'a7_2_1', 'a7_3_1','a7_1_2', 'a7_2_2', 'a7_3_2','a7_1_3', 'a7_2_3', 'a7_3_3']
>>> my_new_list = sum([[x, x+'.1', x+'.2'] for x in my_list[:3]], [])
>>> print(my_new_list)
['a7_1_1', 'a7_1_1.1', 'a7_1_1.2', 'a7_2_1', 'a7_2_1.1', 'a7_2_1.2', 'a7_3_1', 'a7_3_1.1', 'a7_3_1.2']

使用itertools.循环()功能

import itertools as it           #1

def cycle_first_n(lst, n):
    """ cycles through first n elements of the list """
    c = it.cycle(lst[:n])        #2
    for idx in xrange(len(lst)): #3
        sfx = idx / n
        yield c.next() + ('.' + str(sfx) if sfx > 0 else '')  #4
  1. itertools是一个创建迭代器的库 高效循环
  2. 创建一个迭代器,循环遍历 名单
  3. 使用xrange而不是range来避免创建长的 在内存中列出(参见问题)
  4. 屈服意味着我们正在创造一个发电机。再次避免创建 内存中的长列表

如何使用函数

lst = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
for o in cycle_first_n(lst, 3):
    print o,

输出

a b c a.1 b.1 c.1 a.2 b.2

相关问题 更多 >