The 35-year-old Zaheer, who had been battling fitness issues and was even dropped from the BCCI's list of contracted players, was chosen in the 17-member Test squad after taking 13 wickets in three Ranji Trophy matches at an average of 19.84 this season. (Agencies)
Gambhir, however, had no such luck as the opener, who has been downgraded to group B in the list of contracted players, failed to find a place despite a healthy average of 74 plus in the ongoing Ranji season.
The month-long tour featuring three ODIs followed by two Tests is India's first international assignment after the retirement of iconic batsman Sachin Tendulkar.
Baroda batsman Ambati Rayudu, a seasoned domestic player, has been named in both the Test and ODI squads, while veterans like Virender Sehwag and Harbhajan Singh continued to remain on the sidelines.
The 28-year-old Rayudu, who is currently a part of the team in the ongoing ODI series against the West Indies, has played four one-dayers for India.
There were no major surprises in both the squads with the selectors opting to go in for a pace-heavy bowling attack considering the conditions in South Africa.
Pacer Ishant Sharma, who has been struggling for form, was retained in both the squads. The gangling speedster took a match-haul of nine wickets in Delhi's win over Haryana in a Ranji Trophy match.
Another fast bowler Umesh Yadav, who had been dropped due to poor form in the recent series against Australia and West Indies, has been recalled in both the Test and ODI squads largely because of his ability to bowl fast.
An off-colour Yuvraj Singh has managed to hold on to his ODI spot despite having an indifferent show against Australia and the ongoing series against West Indies.
Rookie Haryana pacer Mohit Sharma has also been included in the 16-member ODI squad. Wriddhiman Saha, a regular in the overseas Test tours, was retained as a reserve wicketkeeper, pipping Tamil Nadu's Dinesh Karthik and Gujarat's Parthiv Patel.
The Test squad has seven specialist batsmen, two wicketkeepers, five pacers, two spinners and one all-rounder in Ravindra Jadeja.
While Shikar Dhawan and Murali Vijay are certain to open the innings, Virat Kohli is expected to take the number four slot vacated by Tendulkar.
Cheteshwar Pujara will bat number three, while Rohit Sharma will take the number five slot, followed by Ajinkya Rahane or Ravindra Jadeja depending on the team combination.
Zaheer is expected to feature in the playing XI while the quartet of Mohammed Shami, Ishant Sharma, Bhuvneshwar Kumar and Umesh Yadav will be vying for the two remaining slots.
R Ashwin is expected to mantle the spin duty and bat at number eight, while Pragyan Ojha may get a chance depending on the pitch conditions.
The three ODIs are scheduled to be held in Johannesburg, Durban and Centurion on December 5, 8, 11 respectively.
This will be followed by a two-day practice match against South African Invitational XI at the Willowmoore Park in Benoni.
The first Test match starts on December 18 at the New Wanderers while the 'Boxing Day' Test from December 26 will be played at the Kingsmead in Durban.
Test squad: Mahendra Singh Dhoni (captain), Murali Vijay, Shikhar Dhawan, Cheteshwar Pujara, Virat Kolhi, Rohit Sharma, Ajinkya Rahane, Ambati Rayudu, Wriddhiman Saha, Zaheer Khan, Bhuvneshwar Kumar, Mohammed Shami, Umesh Yadav, Ishant Sharma, R Ashwin, Ravindra Jadeja, Pragyan Ojha
ODI Squad: Mahendra Singh Dhoni (captain), Shikhar Dhawan, Suresh Raina, Yuvraj Singh, Virat Kolhi, Rohit Sharma, Ajinkya Rahane, R Ashwin, Bhuvneshwar Kumar, Mohammed Shami, Umesh Yadav, Ambati Rayudu, Ravindra Jadeja, Ishant Sharma, Mohit Sharma, Amit Mishra.
The 35-year-old Zaheer, who had been battling fitness issues and was even dropped from the BCCI's list of contracted players, was chosen in the 17-member Test squad after taking 13 wickets in three Ranji Trophy matches at an average of 19.84 this season.