new_list = [1, "hello"]
is_str = (type(str) is True)
for element in new_list:
if (element is is_str):
element = element.upper()
我正在尝试创建一个遍历列表中每个元素的循环,然后在找到字符串时以大写形式返回元素。但是,出于某种原因,我的if语句似乎对我不利。有什么想法吗?
答案 0 :(得分:4)
试试这个(正常方式):
new_list = [1, "hello"]
for element in new_list:
if isinstance(element, str):
element = element.upper()
print(element)
Pythonic Way:
new_list = [1, "hello", "ssss"]
your_data = [element.upper() for element in new_list if isinstance(element, str)]
print(your_data)
另一种方式:
new_list = [1, "hello", None]
for element in new_list:
if type(element) is str:
element = element.upper()
print(element)
关于您的评论:
new_list = [1, "hello", None, "hi", "book"]
for counter, element in enumerate(new_list):
if isinstance(element, str):
new_list[counter] = element.upper()
print(new_list)
答案 1 :(得分:0)
使用List Comprehension
的单线程:
>>> [x.upper() for x in l if isinstance(x, str)]
#driver values:
IN : l = [1, 'adsa', 3, 'ASD']
OUT : ['ADSA', 'ASD']
您遇到的问题是由于您使用了element
到update the list
。使用index
代替更新。
for i, element in enumerate(new_list):
if type(element)==str:
new_list[i] = element.upper()
答案 2 :(得分:0)
执行此操作的方式越多Pythonic就不会检查元素是否完全是字符串:
for element in new_list:
try:
uppercase_element = element.upper()
except AttributeError:
pass # Skip this element as it can't be uppercased
else:
print uppercase_element
这比检查元素是否为字符串更有效的一个具体原因是,在Python 2中,Unicode对象不是字符串,但它们可以是大写的(可能应该在您提供的示例中)。