【问题标题】:How to print the even-indexed and odd-indexed characters of strings?如何打印字符串的偶数索引和奇数索引字符?
【发布时间】:2017-06-21 09:03:13
【问题描述】:

手头的任务:

给定一个长度为 N 且索引从 0 到 N-1 的字符串 S,打印 其偶数索引和奇数索引字符为 2 个空格分隔 一行中的字符串。

测试用例的编写使得第一行包含一个 整数,N(测试用例的数量)。 N后续的每一行i 行包含一个字符串。

这是我的代码:

N = int(raw_input())

for i in range(0,N):
    string = raw_input()

evenlist = []
oddlist = []

for item, char in enumerate(strg):
    if item % 2 == 0:
        evenlist.append(char)
    else:
        oddlist.append(char)

print ''.join(evenlist), ''.join(oddlist)

示例运行:

The first input is:
2
Hacker
Rank

Expected output is:
Hce akr
Rn ak

但我明白了:

HceRn akrak

这是assignment 的链接,可以更好地解释这个问题。

【问题讨论】:

  • 有什么问题?
  • 这里有一个链接可以更好地解释这个问题:hackerrank.com/challenges/30-review-loop
  • 您发布的代码不会产生您发布的错误。看起来你是从内存中重新输入的,生成的代码具有完全不同的问题。不要重新输入 - 总是复制粘贴。
  • 知道了。我复制粘贴了
  • 既然你输入了正确的代码,你能告诉我们具体的问题是什么。

标签: python string python-2.7 indexing


【解决方案1】:

更简单的方法是通过使用字符串切片

>>> my_str = 'Hacker'
>>> '{} {}'.format(my_str[::2], my_str[1::2])
'Hce akr'

因此,您的整个代码可以写成:

for _ in range(int(raw_input())):
    my_str = raw_input()
    print '{} {}'.format(my_str[::2], my_str[1::2])

【讨论】:

    【解决方案2】:

    你也可以这样做:

    inp = raw_input("Enter your input: ")
    
    final = "{}  {}".format("".join(inp[k] for k in range(len(inp)) if k % 2 == 0), "".join(inp[k] for k in range(len(inp)) if k % 2 != 0))
    

    【讨论】:

      【解决方案3】:
      import java.io.*;
      import java.util.*;
      
      public class Solution {
      
      
              private static void f(String s) {
                  // TODO Auto-generated method stub
                  char c[]=s.toCharArray();
                  int i,j;
      
                 for (i = 0; i <c.length;i++)
                 { 
                     System.out.print(c[i]);
                         i+=1;
                        // System.out.print(" ");
                 }
                 System.out.print(" ");
      
                 for (j = 1; j<c.length;j++)
                 {
                     System.out.print(c[j]);
                     j+=1;    
                 }
      
              }
      
             public static void main(String[] args)
              {
                  // TODO Auto-generated method stub
                 Scanner sc=new Scanner(System.in);
                 int s=sc.nextInt();
                 String s1=sc.next();
                 f(s1);
      
                  String s2=sc.next();
                 System.out.println();
                 f(s2);
              }
      }
      

      【讨论】:

        【解决方案4】:

        //在java中只是为了更新上面的答案对于他们没有为循环添加的多个字符串

        import java.io.*;
        import java.util.*;
        
        public class dummy {
        
        
            public static void main(String[] args) {
                 Scanner sc=new Scanner(System.in);
                 System.out.print("Enter the number of test cases :");
        
                 int s=sc.nextInt();
        
                 //for loop for multiple strings as per the input
                 for(int m=1;m<= s;m++)
                 {
                      System.out.print("\n Enter the string : ");       
                      String s1=sc.next();
                      f(s1); 
                      System.out.print();       
        
                 }
        
            }
        
            private static void f(String s1){
        
                    char c[]=s1.toCharArray();
                    int i,j;
        
                   for (i = 0; i <c.length;i++)
                   { 
                       System.out.print(c[i]);
                           i+=1;
                   }
                   System.out.print(" ");
        
                   for (j = 1; j<c.length;j++)
                   {
                       System.out.print(c[j]);
                       j+=1;    
                   }
                }
        
        }
        

        【讨论】:

          【解决方案5】:

          试试下面的代码:

          N = int(input())
          
          evenlist = [] oddlist = []
          
          for i in range(0,N): 
             string=input() 
             evenlist.clear() 
             oddlist.clear() 
             for item, char in enumerate(string): 
               if item % 2 == 0: 
                 evenlist.append(char) 
               else: oddlist.append(char) 
             print(''.join(evenlist),''.join(oddlist))
          
          print('')
          

          【讨论】:

          • 这段代码很容易理解,试试这个你会得到预期的输出
          • 第一个 for 循环用于获取输入。如上所述,预期的 o/p haker 第一次我们正在明确奇数列表和偶数列表,然后枚举给我们 haker 的索引和值,如 1 h 2 a 3 k 4 e 5 r 所以 itam 包含索引和 char 包含所以使用模块我们可以分开奇偶事件然后打印输出和内部 for 循环结束,然后它再次进入外部 for 循环,所以它们再次清除奇数和偶数列表然后再次清除它继续重复上面提到的谢谢你
          【解决方案6】:

          Hacker Rank 问题的解决方案是使用字符串切片和列表。

          n= int(input())
          r = []
          if(n>=1 and n<= 10):
              for i in range(n):
                  r.append(input())
          for s in r:
              print("{} {}".format(s[::2],s[1::2]))
          

          【讨论】:

          • 请尝试编辑您的答案以包含有关为什么这将回答问题的信息,而不仅仅是提供代码。
          【解决方案7】:
          num = int(input())
          mylist = []
          
          for words in range (num):
              words = input()
              mylist.append(words)
          #print(mylist)
          
          i=0
          #Considering 0th position as even place here.
          while i<len(mylist):
              print("Letters at even places = {} Letters at odd places ={}".
                format(mylist[i][0:len(mylist[i]):2], mylist[i][1:len(mylist[i]):2]))
              i+=1
          

          这是针对您的问题的 python 解决方案。

          【讨论】:

            【解决方案8】:
            t=int(input("enter number "))
            for i in range(1,t+1) :
                s=input("String")
                even=[]
                odd=[]
                for j,char in enumerate(s) :
                    if j%2==0:
                        even.append(char)
                    else:
                        odd.append(char)
               print(''.join(even), ''.join(odd))
            

            【讨论】:

              【解决方案9】:

              在 Python-3 中

              for i in range(int(input())):
                  STDIN = input()
                  print(f"{STDIN[::2]} {STDIN[1::2]}")
              

              输入:

               2
               Hacker
               Rank
              

              输出:

              Hce akr Rn ak

              【讨论】:

                【解决方案10】:
                t = int(input())
                for i in range(t):
                    s = input()
                    idx = 0
                    newstr = ''
                    newstr2 = ''
                    for letter in s:
                        if idx % 2 == 0:
                            newstr = newstr + s[idx]
                        else:
                            newstr2 = newstr2 + s[idx]
                        idx += 1
                    print(newstr, newstr2)
                

                【讨论】:

                  【解决方案11】:
                  Try the below algorithm. It is in Java. However the basic procedure is to 
                  scan the input word string along its length in increments of 2. The even 
                  index characters are printed first using a for loop starting with i = 0 and 
                  by adding an additional i++ inside the loop. The odd 
                  characters are printed starting the for loop from 1 and incrementing by steps 
                  of 2.  
                  
                  import java.io.*;
                  import java.util.*;
                  import java.text.*;
                  import java.math.*;
                  import java.util.regex.*;
                  import java.util.Arrays;
                  
                  public class Solution {
                  
                  public static void main(String[] args) {
                      
                  
                      Scanner scanner = new Scanner(System.in);
                      int n = scanner.nextInt();
                     
                      for(int iter= 1;iter<=n;iter++)
                      {
                          scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");
                          String myString = scanner.nextLine();
                          char[] myCharArray = myString.toCharArray();
                          int t = myString.length();
                                         
                              for(int i = 0; i < t; i++)
                                  {
                                      // Print each sequential character on the same line
                                      System.out.print(myCharArray[i]); 
                                      i++;
                                  }
                  
                              System.out.print(" "); 
                  
                              for(int k = 1; k < t; k++)
                                  {
                                      // Print each sequential character on the same line
                                      System.out.print(myCharArray[k]);
                                      k++; 
                                  }
                       
                          System.out.print("\n");
                      
                          }
                  
                      }
                  }
                  

                  【讨论】:

                  • OP 问题在 Python 中,我假设他正在寻找 Python 中的答案。此外,您可能需要添加一些 cmets。
                  【解决方案12】:
                  i=0
                  for t in range(int(input())):
                      S = input()
                      y = len(S)
                  
                      print(S[i:y+1:2],S[i+1:y+1:2] )
                  
                  
                  #output= "satisfies all the test cases of HackerRank...."
                  

                  【讨论】:

                    【解决方案13】:

                    #使用for循环和条件语句

                    text=input()
                    for items in range(len(text)):
                        if items%2==0:
                            print(text[items],end='')
                    print(end='  ')
                    for items in range(len(text)):
                        if items%2!=0:
                            print(text[items],end='')
                    

                    【讨论】:

                      【解决方案14】:
                      N = int(input())
                      for _ in range(0,N):
                          my_str = input()
                          print ('{} {}'.format(my_str[::2], my_str[1::2]))
                      

                      #use this ,这将非常适合这个

                      【讨论】:

                        【解决方案15】:

                        我是编码方面的新手,但这在解决所有测试用例时效果很好。

                        T=int(input())
                        for i in range(T):
                          S=input("")
                          for item in range(length(S)):
                             if item%2==0:
                               print(S[item],end="")
                          print(end=" ")
                          for item in range(length(S)):
                             if item%2!=0:
                               print(S[item],end="")
                          print(end='\n')
                        

                        【讨论】:

                        • length 应该是len
                        【解决方案16】:
                        import java.io.*;
                        import java.util.*;
                        
                        public class Solution {
                        
                            public static void main(String[] args) {
                                /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
                                Scanner s=new Scanner(System.in);
                                String str;
                                int T=s.nextInt();
                                for(int i=0;i<T;i++){
                                    str=s.next();
                                  char c[]=str.toCharArray();
                                  int j,k;
                                  for(j=0;j<c.length;j++){
                                      System.out.print(c[j]);
                                      j+=1;
                                  }
                                  System.out.print(" ");
                                  for(k=1;k<c.length;k++){
                                      System.out.print(c[k]);
                                        k+=1;
                                  }
                                  System.out.println();
                                  }
                        
                                s.close();
                            }
                        }
                        

                        【讨论】:

                          【解决方案17】:

                          这也可以通过连接单词来实现

                          Num_set = int(input())
                          
                          
                          for item in range(Num_set):
                              word = input()
                              new = ""
                              second = ""
                              for i in range(len(word)):
                              
                                  if i%2 == 0:
                                      new = new + word[i] 
                                  else:
                                      second = second +word[i]
                              print(new +" "+second)
                          

                          【讨论】:

                            猜你喜欢
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            相关资源
                            最近更新 更多