现在,我正在努力寻找合适的答案。假设我们有这个列表:
['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]
并像这样获取列表中的每个元素,但这不是有效的也不是通用的,或者它会不会?当满足某个条件时,转换列表中元素的最佳方法是什么?
有人能指出正确的方向吗?
答案 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)
它不起作用,因为:
Python中的for
循环创建一个新的局部变量,
您使用==
代替=
。
尝试这种方法:
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)
你可以这样做:
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})
l = ['12', '50', '12', '7', '7', '3', '4', '10', '19', '12']
l = list(map(int, l))
a = ['+' if i>10 else '-' for i in l]