python

时间:2016-05-12 12:55:09

标签: python list nested nested-loops

我试图遍历嵌套列表并对元素进行一些更改。在更改它们之后,我想将结果保存在同一嵌套列表中。 例如,我有

text = [['I', 'have', 'a', 'cat'], ['this', 'cat', 'is', 'black'], ['such', 'a', 'nice', 'cat']]

我想获得一个列表,列表中的元素略有变化。例如:

text = [['I_S', 'have', 'a_A', 'cat'], ['this', 'cat_S', 'is', 'black_A'], ['such', 'a', 'nice', 'cat_S']]

首先,我浏览每个列表,然后浏览列表中的每个项目,然后应用其他代码进行更改。但是如何在操作后返回嵌套列表呢?这就是我的工作:

for tx in text:
    for t in tx:
        #making some operations with each element in the nested list.
        #using if-statements here
    result.append()

我所拥有的单个列表包含嵌套列表中所有已更改的元素

result = ['I_S', 'have', 'a_A', 'cat', 'this', 'cat_S', 'is', 'black_A', 'such', 'a', 'nice', 'cat_S']

我需要保留嵌套列表,因为它实际上是文本中的句子。

4 个答案:

答案 0 :(得分:3)

要创建嵌套列表作为输出,请尝试:

result = []
for i in range(len(text)):
    temp = []
    for t in text[i]:
        word_modified = t
        #making some operations with each element in the nested list.
        #using if-statements here
        temp.append(word_modified)
    result.append(temp)
result

如果您只是复制粘贴此代码,则result将等于text。但是因为在循环中t分别代表每个单词,你应该可以根据自己的意愿修改它。

答案 1 :(得分:1)

[[item + change if needchange else item for item in lst ] for lst in test ]

def unc(item):
   #do something
   return res
[[func(item) for item in lst ] for lst in test ]

答案 2 :(得分:1)

为了使您的代码可读,您可以使用嵌套列表推导来创建结果列表,并定义一个将额外字符串附加到相应文本的函数。

result_text = [[word_processor(word) for word in word_cluster] for word_cluster in text]

您的功能将采用以下形式:

def word_processor(word):
     # use word lengths to determine which word gets extended
     if len(word) > 1 and isintance(word, str):
          return word + "_S"
     else:
          # Do nothing 
          return word

该功能严格取决于您尝试实现的目标。

答案 3 :(得分:0)

可以将修改后的结果保持为嵌套形式的原始列表。单行代码适用于此。

您可以尝试简单地说:

text = [['I','have','a','cat'],['this','cat','is','black'],['such',     'a','nice','cat']]

map(lambda x:map(function,x),text)

这个函数定义可以根据您的要求编写,如:

def function(word):
  #modification/Operations on Word
  return word