如何在满足条件时替换列表中的元素

时间:2016-11-23 16:19:59

标签: python

现在,我正在努力寻找合适的答案。假设我们有这个列表:

['12', '50', '12', '7', '7', '3', '4', '10', '19', '12']

如您所见,它是一个字符串列表。我可以将此映射到ints列表,但我不会,因为我还是需要将它们更改回字符串。另一方面,如果我这样做会很方便,因为我需要检查一个条件。

我需要什么? - > 我需要在满足某个条件时更改列表中的元素。因此,例如:如果元素中的列表大于10,我需要将元素更改为某个字符,如plus (+)minus (-)

最终,我的列表应该是这样的:

['+', '+', '+', '-', '-', '-', '-', '+', '+', '+']

所以,我现在的想法是:

  • 不要将字符串转换为int,因为无论如何我都需要将它们转换为字符串(因此我正在谈论的特殊字符)。

  • 我需要使用for loop,因为我想检查每个元素

我可能需要使用这样的循环:

for score in scores:
   if score == "5": # check if element is a 5
      score == "+"  # make it a plus
   else:
      score == "-"  # make it a minus

问题:这不起作用,我甚至不知道这是否正确。我可以使用score[0]并像这样获取列表中的每个元素,但这不是有效的也不是通用的,或者它会不会?当满足某个条件时,转换列表中元素的最佳方法是什么?

有人能指出正确的方向吗?

3 个答案:

答案 0 :(得分:7)

试试这个(假设你想要10作为截止值)

li = ['12', '50', '12', '7', '7', '3', '4', '10', '19', '12'] 

new_list = ['+' if int(el)>10 else '-' for el in li]

答案 1 :(得分:1)

它不起作用,因为:

  1. Python中的for循环创建一个新的局部变量,

  2. 您使用==代替=

  3. 尝试这种方法:

    for index, score in enumerate(scores):
       if scores[index] == "5": # check if element is a 5
          scores[index] = "+"  # make it a plus
       else:
          scores[index] = "-"  # make it a minus
    

    快速注释:您的问题会询问“更大/更小”,但您的示例使用==。如果要测试更大或更小,则必须将元素转换为int

答案 2 :(得分:1)

你可以这样做:

  1. 初始set(TARGET_FILES "") file(GLOB SRC_FILES "src/*.txt") foreach(SRC_FILE ${SRC_FILES}) string(REGEX REPLACE "^.*/(.*).txt$" "\\1-foo.txt" TARGET_FILE ${SRC_FILE}) add_custom_command( OUTPUT ${PROJECT_SOURCE_DIR}/sub/${TARGET_FILE} COMMAND ${CMAKE_COMMAND} ARGS -E make_directory ${PROJECT_SOURCE_DIR}/sub COMMAND ${PROJECT_SOURCE_DIR}/process.sh ARGS ${SRC_FILE} MAIN_DEPENDENCY ${PROJECT_SOURCE_DIR}/process.sh) list(APPEND TARGET_FILES "${PROJECT_SOURCE_DIR}/sub/${TARGET_FILE}") endforeach() add_custom_target(foo_txt ALL DEPENDS ${TARGET_FILES})
  2. 映射到int:l = ['12', '50', '12', '7', '7', '3', '4', '10', '19', '12']
  3. 然后:l = list(map(int, l))
  4. a = a = ['+' if i>10 else '-' for i in l]