到目前为止,这是我的代码
def firstChars( s ):
for word in s:
print (s[0][0])
这是它打印的内容:
>>> s='hello','world'
>>> firstChars(s)
h
h
如何更改此代码以使其打印出"H"和"W"?
s[0]
将始终是传递给函数的序列中的第一个元素。要使用上面for
循环中正在检查的特定单词,请改用循环中的word
。
word
表示元组/可迭代对象的每个元素。对于元组("Hello", "World")
,word
将等于"Hello",然后等于"World"。要获取每个字母的第一个字母,请将word
下标:word[0]
。
请注意,这不是最安全的方法,因为它会在空字符串上崩溃(因为""
没有第 0 个元素)。如果您不能保证字符串不会为空,我可能会定义一个处理空字符串情况的"firstLetter"函数。
为了详细说明JL的答案,你写的东西运行"很好",因为字符串和元组都是可迭代的(就像列表一样)。
当你写s[0][0]
时,s[0]
计算为"Hello",那么你只剩下"Hello"[0]
,计算结果为"H"。它输出两次,每次循环迭代一次,因为您基于元组(具有 2 个元素)进行循环。
另一种 pythonic 方式
s='hello','world'
print('rn'.join(item[0] for item in s))
h
w
使用 for word in s
循环,word
将首先指向 s
的第一个元素,然后指向第二个元素,依此类推。如果解释对您没有意义,只需运行以下命令:
def each_word(s):
for word in s:
print s
s = ("hello", "wolrd")
each_word(s)
现在字符串word
的第一个字符是 word[0]
,这应该足以解决您的问题。
for word in s:
print (s[0][0])
在这个代码片段中,word
依次成为s
的每个元素——s[0]
("你好")然后s[1]
("世界")。 而s[0][0]
直接访问s
的第一个元素的第一个元素('h')。 您希望依次访问每个元素的第一个元素。所以:
for word in s:
print (word[0])
将做你想完成的事情。
这有效。 现在,一点警告,它又回到了另一个关于命名的评论。 在 Python 中,很难将字符串与列表或元组区分开来。 它们都是迭代的,它们都有长度和索引。
在命名事物时要小心,因为没有编译器可以捕捉愚蠢的东西。
def firstChars( s ):
#iterate through list/tuple passed in
for word in s:
#now, pick the first character
print (word[0])
试试这个:
def firstChars( s ):
for word in s:
print (word[0])
在函数 firstChars
中,您可以正确遍历 s
中的项,但请注意,在 for
块中,您应该使用 word
,因为它是在 s
中分配当前项的变量。
另请注意,当您像s[0][0]
那样排列多个索引时,每个索引都会"更深入地挖掘"上一项。因此,s[0]
引用s
中的第一项(字符串"hello"),以下[0]
引用该项目的第一个字符("h")。