有没有一种方法可以连接列表的每n个元素

时间:2020-02-09 05:07:33

标签: python string list concatenation

说我有26个元素的列表,每个元素的字母如下:

alphabets = ['a', 'b', ... , 'y', 'z']

我的目标是每5个元素进行迭代连接,产生:

combined_strings = ['abcde', 'bcdef', ... 'vwxyz']

我尝试过:

combined_strings = []
for i, k in enumerate(alphabets):
    temp_string = k[i] + k[i+1] + k[i+2] + k[i+3] + k[i+4]
    combined_strings.append(temp_string)

但我遇到IndexError: List index out of range

4 个答案:

答案 0 :(得分:1)

您以错误的方式使用enumerateenumerate给出索引和该索引处的元素,因此k[i]没有任何意义。 另外,遍历整个长度会导致IndexError,因为您将访问不存在的27、28、29、30处的元素。

您可以将代码更正为:

combined_strings = []
for i in range(len(alphabets)-4):
    temp_string = alphabets[i] + alphabets[i+1] + alphabets[i+2] + alphabets[i+3] + alphabets[i+4]
    combined_strings.append(temp_string)

答案 1 :(得分:0)

为此目的,使用字符串比使用列表更方便,因为您可以对字符串进行切片以提取子字符串。您也可以从ascii_lowercase模块导入string,而不必自己写出来。

>>> from string import ascii_lowercase as alphabet
>>> [ alphabet[i:i+5] for i in range(len(alphabet) - 4) ]
['abcde', 'bcdef', 'cdefg', 'defgh', 'efghi', 'fghij', 'ghijk', 'hijkl',
 'ijklm', 'jklmn', 'klmno', 'lmnop', 'mnopq', 'nopqr', 'opqrs', 'pqrst',
 'qrstu', 'rstuv', 'stuvw', 'tuvwx', 'uvwxy', 'vwxyz']

请注意,范围应增加到len(alphabet) - 4(不包括),以使最后一个子字符串的全长为5。

答案 2 :(得分:0)

您在列表中的位置太远了,您的i会一直到i = 26,然后您没有27、28、29或30个字母

您可以执行以下操作:

get_listcol = function(..., d, list_col, join_cols = names(list(...)), mult = FALSE){
  d[list(...), on=join_cols, nomatch=0, {
    if (.N == 0L){
      stop("No matches found.")
    } else if (.N == 1L){
      .SD[[1]][[1]]
    } else {
      if (mult){
        .SD[[1]]
      } else {
        stop("Multiple matches found.")
      }
    }
  }, .SDcols=list_col]
}

# usage
get_a2 = function(ii, jj) get_listcol(i = ii, j = jj, d = dt, list_col = "a")
get_a2(1,1)   # works as expected
get_a2(1,4)   # error
get_a2(1,1:2) # error

答案 3 :(得分:0)

尝试以下操作。

import string
li = list(string.ascii_lowercase);
liRes = []
for i in range(0,22):
    liRes.append("".join(li[i:i+5]))
print(liRes)